# Recomendação

Os sistemas de recomendação com Collaborative Filtering (Filtragem Colaborativa) ajudam a sugerir itens relevantes analisando o comportamento de diferentes usuários ou itens similares. Existem duas abordagens principais: user-user e item-item.

Por exemplo, imagine que você gostou de um filme em uma plataforma de streaming. Com o método user-user, o sistema procura pessoas com gostos parecidos com os seus e sugere filmes que elas gostaram. Já no método item-item, ele pode sugerir um filme com base no que você acabou de assistir.

Esses métodos funcionam como uma espécie de "rede de amigos invisível", ajudando você a descobrir coisas novas que têm tudo a ver com o usuário.

Atualmente, apenas o modelo Collaborative Filtering está disponível, outros modelos serão desenvolvidos em breve.



#### EXEMPLO DE USO

```
uses
  URecommender;
  
procedure ExampleRecommender;
var
  vRecommender: TRecommender;
begin
  vRecommender := TRecommender.Create('C:\DelphAI\DelphAI\Datasets\MovieLens-100k\user_item_matrix.csv', 5, 20, TUserScoreAggregationMethod.amWeightedAverage, dmCosine, True, False);
  try
    ShowArray(vRecommender.RecommendFromUser(105));
    ShowArray(vRecommender.RecommendFromItem(4070));
  finally
    vRecommender.Free;
  end;
end;
```



#### GUIA DE CLASSES E MÉTODOS

TRecommender:

* _FDataset : TAIDatasetClassification;_ : acessa a base de dados atual contido no modelo.
* _procedure ClearDataset;_ : limpa o dataset.
* _constructor Create(aMatrixFile : String; aItemsToRecommendCount, aK : Integer; aAggregMethod : TUserScoreAggregationMethod = amWeightedAverage; aDistanceMethod : TDistanceMode = dmCosine; aCalculateItemDistanceOnCreate : Boolean = False; aHasHeader : Boolean = True);_ ou
* _constructor Create(aMatrix: TDataSet; aItemsToRecommendCount, aK : Integer; aAggregMethod : TUserScoreAggregationMethod = amWeightedAverage; aDistanceMethod : TDistanceMode = dmCosine; aCalculateItemDistanceOnCreate : Boolean = False);_ : cria o objeto com a base que será usada para treinamento.
  * _aMatrixFile_ : caminho do arquivo CSV.
  * _aMatrix_ : objeto TDataSet que contém os dados que serão usados para treinamento. Veja como deve ser a estrutura [aqui](https://delphai.gitbook.io/delphai/documentacao/base-de-dados-x/recomendacao-ds-x).
  * _aItemsToRecommendCount_ : quantidade máxima de itens que serão recomendados.
  * _aAggregMethod_ : método de agregação dos usuários:
    * _amMode_ : refere-se ao valor mais frequente em um conjunto de dados;
    * _amWeightedAverage_ : média calculada atribuindo pesos diferentes a cada valor no conjunto de dados, de acordo com sua importância;
    * _amSimpleSum_ : soma de todos os valores do conjunto de dados, sem aplicar nenhum peso ou fator adicional.
  * _aDistanceMethod_ :
    * _dmManhattan_ **:** mede a distância entre dois pontos, somando as diferenças absolutas em cada dimensão, como se fosse percorrida em linhas retas ao longo de uma grade;
    * _dmEuclidean_ **:** calcula a distância em linha reta entre dois pontos no espaço, sendo a raiz quadrada da soma dos quadrados das diferenças entre as coordenadas;
    * _dmCosine_ **:** mede a similaridade entre dois vetores com base no cosseno do ângulo entre eles, focando na direção, não na magnitude;
    * _dmJaccard_ **:** avalia a similaridade entre conjuntos dividindo o tamanho da interseção pelo tamanho da união dos conjuntos;
    * _dmPearson_ **:** mede a correlação linear entre duas variáveis, avaliando a força e a direção da relação entre elas.
  * _aCalculateItemDistanceOnCreate_ : define se será calculada a matriz de distância do item na hora criação, utilizada apenas para recomendação por item. Caso não seja calculada na criação, será calculada na primeira predição por item.
  * _aHasHeader_ : indica se tem cabeçalho no arquivo.
* _function RecommendFromItem(aItemID: Integer): TArray;_ : recomenda X itens a partir de um certo item cadastrado.
* _function RecommendFromItem(aItemInfo: TArray; aIDSearch : Integer = -1): TArray;_ : recomenda X itens a partir dos dados de um item que não esta no dataset.
* _function RecommendFromUser(aUserID: Integer): TArray;_ : recomenda X itens a partir de um certo usuário cadastrado.
* _function RecommendFromUser(aUserInfo: TArray; aIDSearch : Integer = -1): TArray;_ : recomenda X itens a partir dos dados de um usuário que não esta no dataset.

