mlTools

crossValidate

##set_mltools

Description

L'action %%crossValidate est le véritable juge de paix de vos modèles. Au lieu de vous fier à une seule partition d'entraînement et de test, elle découpe vos données en 'k' segments (les plis ou folds). Elle entraîne le modèleReprésentation mathématique entraînée sur des données pour capturer des tendances, prédire des résultats ou classifier des observations via des algorithmes (Régression, Forêt aléatoire, Gradient Boosting). 'k' fois, en utilisant à chaque fois un segment différent pour la validation. C'est la méthode idéale pour s'assurer que votre modèleReprésentation mathématique entraînée sur des données pour capturer des tendances, prédire des résultats ou classifier des observations via des algorithmes (Régression, Forêt aléatoire, Gradient Boosting). n'est pas juste un champion du 'par cœur' (overfittingSurapprentissage d'un modèle mémorisant le bruit des données d'entraînement au lieu des tendances, réduisant ainsi sa capacité de généralisation et sa précision sur de nouvelles observations.) mais qu'il sait vraiment généraliser. C'est un peu comme demander à un étudiant de passer 5 examens différents sur le même sujet pour vérifier qu'il a bien compris la logique et qu'il n'a pas simplement eu de la chance sur une question précise !

Syntaxe Officielle
proc cas;
mlTools.crossValidate /
casOut={caslib="nom_caslib", name="nom_table", replace=true|false},
kFolds=entier,
logLevel=0|1|2|3,
modelType="BNET"|"DECISIONTREE"|"FACTMAC"|"FOREST"|"GRADBOOST"|"NEURALNET"|"SVM",
nSubsessionWorkers=entier,
parallelFolds=true|false,
seed=entier,
targetEvent="valeur_cible",
trainOptions={parametres_action_entrainement};
run;

Paramètres Clés

Nom du paramètre Description
casOut Désigne la table de sortie CAS qui contiendra les scores et les résultats de l'évaluation pour tous les plis.
kFolds Le nombre de plis pour la validation croisée (par défaut 5). Plus il y en a, plus c'est précis, mais plus votre CPU risque de transpirer.
logLevel Définit le niveau de bavardage de l'action dans le journal (0 à 3). À 3, elle vous raconte presque sa vie par pli.
modelType Le type d'algorithme à valider (ex: FOREST, GRADBOOST, SVM). Assurez-vous que les trainOptions correspondent !
trainOptions C'est ici que vous glissez les paramètres spécifiques de l'action d'entraînement sous-jacente (comme les variables d'entrée et la cible).
parallelFolds Si TRUE, l'action traite les plis en parallèle. C'est le mode 'Turbo' pour les serveurs avec beaucoup de coeurs.
seed La graine aléatoire. Crucial pour pouvoir reproduire exactement le même découpage si vous voulez rejouer le match.

Préparation des données

Préparation des données bancaires HMEQ

On charge la table HMEQ (Home Equity) pour prédire les défauts de crédit. Un classique indémodable.

1DATA casuser.hmeq; SET sampsio.hmeq; RUN;

Exemples d'utilisation

Validation croisée basique d'un Arbre de Décision

On vérifie la performance d'un arbre de décision simple avec 5 plis par défaut.

1PROC CAS; mlTools.crossValidate / modelType="DECISIONTREE", trainOptions={TABLE="hmeq", target="BAD", inputs={"LOAN", "MORTDUE", "VALUE"}, nominals={"BAD"}}; RUN;
Résultat Attendu :
Un tableau récapitulatif montrant l'erreur moyenne et les statistiques de performance sur les 5 plis.
Validation croisée robuste d'une Forêt Aléatoire

Ici, on monte à 10 plis, on active le parallélisme et on fixe une graine pour la reproductibilité. On précise aussi l'événement cible '1' (défaut de paiement).

1PROC CAS; mlTools.crossValidate / kFolds=10, parallelFolds=true, seed=123, modelType="FOREST", targetEvent="1", trainOptions={TABLE={caslib="casuser", name="hmeq"}, target="BAD", inputs={"LOAN", "MORTDUE", "VALUE", "YOJ", "DEROG", "DELINQ"}, nominals={"BAD"}, nTree=50}, casOut={name="cv_results", replace=true}; RUN;
Résultat Attendu :
Une analyse détaillée sur 10 itérations, stockée dans 'cv_results', permettant de juger de la stabilité du modèle FOREST.