L'action `factmac` (Factorization Machine) implémente un algorithme d'apprentissage automatique conçu pour traiter efficacement des données creuses (sparse data). Elle est particulièrement populaire dans les systèmes de recommandation. Le modèle estime les interactions entre les variables en factorisant la matrice des poids, permettant de prédire des cibles même en présence de nombreuses valeurs manquantes ou de cardinalités élevées.
| Paramètre | Description |
|---|---|
| table | Spécifie la table d'entrée (CASTable) contenant les données d'entraînement. Ce paramètre est obligatoire. |
| target | Nom de la variable cible (réponse) à prédire. Pour les systèmes de recommandation, il s'agit souvent de la note ou du rating. |
| inputs | Liste des variables d'entrée à utiliser pour l'analyse. |
| nominals | Spécifie les variables d'entrée qui doivent être traitées comme des variables nominales (catégorielles). |
| nFactors | Le nombre de facteurs latents (k) à estimer. Une valeur plus élevée peut capturer des interactions plus complexes mais augmente le risque de surapprentissage (valeur par défaut : 5). |
| maxIter | Le nombre maximum d'itérations pour l'optimisation du modèle (valeur par défaut : 30). |
| learnStep | Le pas d'apprentissage (learning rate) utilisé par l'algorithme de descente de gradient stochastique (valeur par défaut : 0.001). |
| outModel | Spécifie la table de sortie CAS où seront stockés les paramètres estimés du modèle (les facteurs latents et les biais). |
| saveState | Sauvegarde l'état du modèle dans une table binaire (Analytic Store) pour un déploiement et un scoring ultérieurs. |
| output | Crée une table contenant les prédictions (scores) pour les données d'entrée. |
| nonNegative | Si défini à True, force la factorisation à être non négative (utile pour certaines interprétations). |
Nous créons un jeu de données simulant des utilisateurs notant des films. Les données sont volontairement incomplètes (tous les utilisateurs n'ont pas vu tous les films), ce qui est typique pour l'utilisation de factmac.
| 1 | DATA casuser.movie_ratings; INPUT UserID $ MovieID $ Rating; DATALINES; |
| 2 | User1 Movie1 5 |
| 3 | User1 Movie2 3 |
| 4 | User1 Movie3 . |
| 5 | User2 Movie1 4 |
| 6 | User2 Movie3 5 |
| 7 | User3 Movie2 5 |
| 8 | User3 Movie3 2 |
| 9 | User4 Movie1 1 |
| 10 | User4 Movie3 5 |
| 11 | ; RUN; |
Cet exemple entraîne un modèle `factmac` de base sur les données de notation pour estimer 2 facteurs latents.
| 1 | |
| 2 | PROC CAS; |
| 3 | factmac.factmac / TABLE={name="movie_ratings", caslib="casuser"}, target="Rating", inputs={"UserID", "MovieID"}, nominals={"UserID", "MovieID"}, nFactors=2, outModel={name="factmac_factors", caslib="casuser"}; |
| 4 | |
| 5 | RUN; |
| 6 |
Cet exemple configure un modèle plus complexe avec 5 facteurs, un pas d'apprentissage ajusté, et sauvegarde le modèle sous forme d'Analytic Store (ASTORE) pour pouvoir prédire de nouvelles notes ultérieurement.
| 1 | |
| 2 | PROC CAS; |
| 3 | factmac.factmac / TABLE={name="movie_ratings", caslib="casuser"}, target="Rating", inputs={"UserID", "MovieID"}, nominals={"UserID", "MovieID"}, nFactors=5, maxIter=50, learnStep=0.005, saveState={name="factmac_astore", caslib="casuser"}, OUTPUT={casOut={name="scored_ratings", caslib="casuser", replace=TRUE}, copyVars={"UserID", "MovieID", "Rating"}}; |
| 4 | |
| 5 | RUN; |
| 6 |