Validation d'un modèle d'apprentissage automatique de classification binaire dans Power BI.
Oct 10, 2024L'apprentissage automatique permet de réaliser toutes sortes de choses merveilleuses. Il permet de mieux comprendre vos données, de prédire l'avenir et d'orienter votre prise de décision. Au-delà des technologies utilisées ou des types de modèles que vous créez, la validation de ces modèles est un élément important. Un apprentissage automatique imprécis ne vous sera d'aucune utilité et pourrait coûter cher à votre organisation.
Il existe de nombreuses façons de valider et d'afficher la précision d'un modèle d'apprentissage automatique. R et Python ont tous deux un support pour cela qui peut être implémenté dans Power BI. Cependant, dans ce blog, on va effectuer la validation en utilisant uniquement des visuels Power BI standard et DAX.
Ce type d'analyse peut être réalisé dans Power BI soit comme une validation ponctuelle, soit comme un programme continu pour contrôler l'efficacité d'un modèle. Voici plusieurs façons de valider les modèles d'apprentissage automatique dans Power BI.
Les Données à utiliser dans Power BI:
Les données utilisées sont issus de tests cliniques en rapport avec le cancer du sein. Nous verrons par la suite comment exploiter certaines de ces analyses dans d'autres domaines comme le marketing.
import numpy as np import pandas as pd from sklearn import svm, datasets from sklearn.model_selection import train_test_split from sklearn.preprocessing import label_binarize from sklearn.multiclass import OneVsRestClassifier # Importer les données bc_data = datasets.load_breast_cancer() X = bc_data.data y = bc_data.target # Binarisation de la sortie y = label_binarize(y, classes=[0, 1]) n_classes = y.shape[1] # Ajouter des éléments bruités pour rendre le problème plus difficile random_state = np.random.RandomState(0) n_samples, n_features = X.shape X = np.c_[X, random_state.randn(n_samples, 200 * n_features)] # mélanger et diviser les ensembles de formation et de test X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.5, random_state=0) # Apprendre à prédire chaque classe par rapport à l'autre classifier = OneVsRestClassifier( svm.SVC(kernel="linear", probability=True, random_state=random_state) ) y_score = classifier.fit(X_train, y_train).decision_function(X_test) # DataFrame results = pd.DataFrame(zip(y_score, y_test), columns=['Prediction', 'Result'])
Remarque:
Ici, vous trouverez comment éxecuter le code Python dans Power BI.
Les principales colonnes des données que on examinera sont la colonne « Prédiction », qui donne la sortie du modèle sous forme de nombre décimal, et la colonne « Résultats », qui est soit un 1, soit un 0.
Il s'agit d'un exemple de classification binaire où il n'y a que deux résultats possibles. On utilisera le terme « événement » dans le cas d'un 1, et « non-événement » dans le cas d'un zéro. Si tout se passe bien, des valeurs de prédiction élevées devraient être en corrélation avec des événements, et plus la valeur de prédiction est élevée, plus le modèle estime que le résultat est un événement.
Souvent, une valeur seuil est utilisée pour déterminer le résultat de la prédiction. Les valeurs prédites supérieures au seuil constituent une prédiction positive prédisant que l'événement se produira. Les valeurs inférieures au seuil constituent une prédiction négative, prédisant que l'événement ne se produira pas.
Lorsque vous effectuez ce type de validation dans la réalité, vous avez besoin à la fois de la prédiction et d'un résultat réel. Ce résultat peut provenir d'une partie de vos données d'apprentissage conservées en tant qu'ensemble de test ou de l'attente des résultats de ce que vous prédisez.
Validation du graphe de précision:
La façon la plus simple de valider votre modèle est de tracer la précision des prédictions. Dans un diagramme de précision, les valeurs de prédiction/seuil forment l'axe X et le pourcentage d'exactitude est représenté sur l'axe Y.
Dans la classification binaire, une prédiction peut être correcte de deux façons. - Un vrai positif, lorsque la prédiction indique qu'un événement va se produire et que l'événement se produit. - Un Vrai négatif, lorsque le modèle indique qu'un événement ne se produira pas, et que l'événement ne se produit pas.
Vous trouverez ci-dessous les mesures permettant de calculer le taux de vrais positifs, le taux de vrais négatifs et le taux de précision pour le visuel.
True Positive Rate Measure = VAR threshold = SELECTEDVALUE ( 'Results'[Prediction] ) VAR truePos = CALCULATE ( COUNTROWS ( 'Results' ), 'Results'[Prediction] >= threshold, 'Results'[Result] = 1 ) VAR allEvent = CALCULATE ( COUNTROWS ( 'Results' ), ALL ( 'Results' ), 'Results'[Result] = 1 ) RETURN DIVIDE ( truePos, allEvent ) True Negative Rate Measure = VAR threshold = SELECTEDVALUE ( 'Results'[Prediction] ) VAR trueNeg = CALCULATE ( COUNTROWS ( 'Results' ), 'Results'[Prediction] < threshold, 'Results'[Result] = 0 ) VAR allNoEvent = CALCULATE ( COUNTROWS ( 'Results' ), ALL ( 'Results' ), 'Results'[Result] = 0 ) RETURN DIVIDE ( trueNeg, allNoEvent ) Accuracy Rate = VAR threshold = SELECTEDVALUE ( 'Results'[Prediction] ) VAR truePos = CALCULATE ( COUNTROWS ( 'Results' ), 'Results'[Prediction] >= threshold, 'Results'[Result] = 1 ) VAR trueNeg = CALCULATE ( COUNTROWS ( 'Results' ), 'Results'[Prediction] < threshold, 'Results'[Result] = 0 ) VAR allRows = CALCULATE ( COUNTROWS ( 'Results' ), ALL ( 'Results' ) ) RETURN DIVIDE ( truePos + trueNeg, allRows )
Vous trouverez ci-dessous le tableau de validation du modèle à l'aide de ces mesures. Vous pouvez constater qu'à mesure que le seuil augmente de gauche à droite sur l'axe des X, le taux de vrais positifs diminue et le taux de vrais négatifs augmente. En tenant compte des deux, la précision atteint un maximum d'environ 95 % avec un seuil de 0,29.
Courbe ROC et validation de la précision et du rappel :
Deux autres graphiques couramment utilisés dans l'apprentissage automatique sont la courbe ROC et les diagrammes précision-rappel. Ces deux graphiques montrent l'effet de la modification de la valeur seuil sur la précision des prédictions. Chaque point du graphique représente une valeur seuil possible, sa position sur le graphique indiquant sa qualité.
La courbe ROC (Receiver Operating Characteristic) provient de la Seconde Guerre mondiale, où elle a été développée pour évaluer les opérateurs de récepteurs radar. Elle représente le taux de faux positifs par rapport au taux de vrais positifs pour une série de valeurs seuils. Ce graphique permet de montrer l'efficacité d'un modèle lorsque le nombre d'événements/non-événements est à peu près égal.
Lorsque le nombre d'événements est faible, comme dans le cas de la fraude par carte de crédit, il convient d'utiliser la courbe Précision-Recall. Ici, le rappel (identique au taux de vrais positifs) est tracé en fonction de la précision, qui est le nombre de vrais positifs divisé par le nombre total de prédictions positives.
Pour réaliser ces tracés, la première étape consiste à créer une table calculée. Vous trouverez ci-dessous le code DAX nécessaire à la création de ce tableau.
Predictions = ADDCOLUMNS ( CALCULATETABLE ( DISTINCT ( 'Results'[Prediction] ) ), "Taux False Positive", VAR threshold = [Prediction] VAR falsePositives = CALCULATE ( COUNTROWS ( 'Results' ), 'Results'[Prediction] >= threshold, 'Results'[Result] = 0 ) VAR trueNegatives = CALCULATE ( COUNTROWS ( 'Results' ), 'Results'[Prediction] < threshold, 'Results'[Result] = 0 ) RETURN DIVIDE ( falsePositives, falsePositives + trueNegatives ) + DIVIDE ( threshold, 10000000 ), "True Positive Rate/Recall", VAR threshold = [Prediction] VAR falseNegatives = CALCULATE ( COUNTROWS ( 'Results' ), 'Results'[Prediction] < threshold, 'Results'[Result] = 1 ) VAR truePositives = CALCULATE ( COUNTROWS ( 'Results' ), 'Results'[Prediction] >= threshold, 'Results'[Result] = 1 ) VAR positives = CALCULATE ( COUNTROWS ( 'Results' ), 'Results'[Result] = 1 ) RETURN DIVIDE ( truePositives, truePositives + falseNegatives ) + DIVIDE ( threshold, 10000000 ), "Precision", VAR threshold = [Prediction] VAR falsePositives = CALCULATE ( COUNTROWS ( 'Results' ), 'Results'[Prediction] >= threshold, 'Results'[Result] = 0 ) VAR truePositives = CALCULATE ( COUNTROWS ( 'Results' ), 'Results'[Prediction] >= threshold, 'Results'[Result] = 1 ) RETURN DIVIDE ( truePositives, truePositives + falsePositives ) )
Le code commence par rassembler toutes les valeurs de prédiction du modèle dans une colonne. Sur la base de cette colonne, plusieurs autres valeurs sont calculées : Taux de faux positifs, Taux de vrais positifs/Rappel et Précision.
Les résultats des colonnes Taux de vrais et de faux positifs sont complétés par un terme supplémentaire sous la forme de DIVIDE ( threshold, 10000000 ). Ces colonnes sont triées par la colonne Prédiction et le terme supplémentaire garantit que toutes les valeurs sont uniques, de sorte que le tri fonctionne et que Power BI ne donne pas d'erreur tout en ne modifiant pas beaucoup les valeurs.
Pour créer la courbe ROC, créez un graphique linéaire. Ajoutez ensuite le taux de faux positifs comme valeur de l'axe et le taux de vrais positifs comme valeurs.
On a ajouté une ligne neutre ou aléatoire en créant la mesure ci-dessous.
Neutral = SELECTEDVALUE ( 'Predictions'[False Positive Rate] )
Cette mesure créera la ligne diagonale dans le graphique allant de 0,0 à 1,1. Cette ligne représente la précision des résultats obtenus au hasard. Le degré de dépassement de la ligne par les résultats indique le degré de précision du modèle. Un modèle parfait irait tout droit vers le haut de l'axe Y, ferait un virage à 90 degrés à 1, puis irait tout droit vers le haut.
À l'instar de la courbe ROC, la courbe de précision-rappel est un autre graphique linéaire. Cette fois, j'ai utilisé le taux de vrais positifs/rappels comme valeur de l'axe et la précision comme axe des ordonnées. Le graphique est inversé par rapport à la courbe ROC. Un modèle parfait ici irait tout droit en haut, de gauche à droite, puis tout droit vers le bas sur le côté droit.
Validation du modèle Lift
Dans des situations telles que le marketing, il est important de trouver le groupe optimal de clients potentiels à qui s'adresser. Une entreprise peut disposer d'une liste importante de clients potentiels, mais une campagne de marketing ne convertira qu'un petit nombre de ces personnes en clients. Il est judicieux de cibler les personnes qui ont une forte probabilité de se convertir et d'éviter de consacrer des ressources à celles qui ont le moins de chances de le faire.
Nous pouvons regrouper les clients, ou toute autre donnée, en fonction des valeurs de probabilité générées par notre modèle Power BI. Pour chaque groupe, nous pouvons calculer le Lift, c'est-à-dire le taux auquel chaque groupe surreprésente ou sous-représente le taux de conversion moyen.
Généralement, les valeurs de prédiction sont utilisées pour diviser les lignes en déciles. Cette opération peut être effectuée en tant que colonne calculée dans le tableau « Résultats » de Power BI à l'aide du DAX ci-dessous.
Decile = VAR val = 'Results'[Prediction] VAR rankNum = RANK.EQ ( val, 'Results'[Prediction], ASC ) VAR maxRank = MAXX ( 'Results', RANK.EQ ( 'Results'[Prediction], 'Results'[Prediction] ) ) RETURN CEILING ( DIVIDE ( rankNum, maxRank ) * 10, 1 )
#Cette colonne place les lignes ayant les scores de prédiction les plus élevés dans le 10e décile, et celles ayant les scores les plus faibles dans le 1er décile. Les mesures suivantes sont utilisées pour déterminer l'ascension de chaque décile, en divisant le taux de précision pour un décile donné par le taux pour l'ensemble des données.
Predicted Rate = VAR decile = SELECTEDVALUE ( 'Results'[Decile] ) VAR total = CALCULATE ( COUNTROWS ( 'Results' ), 'Results'[Decile] = decile ) VAR correct = CALCULATE ( COUNTROWS ( 'Results' ), 'Results'[Decile] = decile, 'Results'[Result] = 1 ) RETURN DIVIDE ( correct, total )
Average Rate = VAR total = CALCULATE ( COUNTROWS ( 'Results' ), ALL ( 'Results' ) ) VAR positives = CALCULATE ( COUNTROWS ( 'Results' ), ALL ( 'Results' ), 'Results'[Result] = 1 ) RETURN DIVIDE ( positives, total ) Lift = DIVIDE ( [Predicted Rate], [Average Rate] )
L'élévation peut ensuite être représentée sur un graphique à colonnes. On a ajouté une ligne à 100 % pour montrer la ligne de base. Toutes les colonnes qui s'étendent au-dessus de la ligne de base indiquent les déciles dont la précision ou Lift est supérieure à la moyenne.
S'il s'agissait de clients potentiels, il serait logique de consacrer la majeure partie des ressources marketing aux déciles 6 à 10, car ils ont une plus forte propension à se convertir. Les clients du 1er au 3e décile pourraient être ignorés.
Conclusion
Dans ce blog, On a montré plusieurs façons de valider et de surveiller vos modèles d'apprentissage automatique dans Power BI. Lorsque vous utilisez des modèles d'apprentissage automatique, il est important de savoir s'ils fonctionnent bien et s'ils sont fiables. En utilisant les visuels de ce blog, vous devriez être en mesure de garder un œil sur vos modèles et d'avoir confiance en vos résultats ou de savoir que vous devez les mettre à jour.