Création d'un modèle prédictif Naive Bayes dans Power BI
Sep 25, 2024Power BI est un outil très performant en matière d'analyse descriptive et diagnostique. Il est facile de créer un rapport présentant l'état actuel ou passé d'une entreprise, avec la possibilité d'explorer les causes d'un résultat donné. Les niveaux d'analyse suivants sont les niveaux prédictif et prescriptif, qui tentent de prédire ce qui va se passer et ce qu'il faut faire.
Power BI de base ne prend pas en charge ces niveaux, mais il existe plusieurs façons de les ajouter. Vous pouvez utiliser R et Python dans Power BI pour étendre Power BI et ajouter l'apprentissage automatique. Power BI Premium inclut l'apprentissage automatique, mais son coût peut être prohibitif, il existe des moyens de faire de l'apprentissage automatique simple dans Power BI en utilisant uniquement DAX. Cela peut se faire en créant un modèle prédictif Naive Bayes dans Power BI.
Qu'est-ce qu'un modèle prédictif Naive Bayes ?
Naive Bayes est une méthode statistique permettant de prédire la probabilité qu'un événement se produise, sachant que d'autres événements se sont également produits. Vous trouverez ci-dessous des formules illustrant les mathématiques que nous utiliserons.
La première formule fournit les variables telles qu'elles sont écrites en anglais. Supposons qu'il y ait deux événements, A et B. Nous voulons connaître la probabilité que l'événement A se produise si l'événement B se produit également. Pour calculer cette probabilité, vous pouvez utiliser des données historiques ou des données d'apprentissage.
Tout d'abord, nous calculons la probabilité que l'événement A se produise, indépendamment de tout autre événement. Multipliez cette probabilité par la probabilité que l'événement B se produise si l'événement A se produit également. Divisez ensuite par la probabilité que l'événement B se produise.
Ce résultat est résumé dans l'équation du milieu en utilisant une notation mathématique plus standard.
La troisième équation développe celle du milieu pour deux événements dépendants. Ici, la probabilité de l'événement A dépend de deux événements, B1 et B2. C'est la forme de l'équation que nous utiliserons ci-dessous. Nous devrons calculer à la fois la probabilité que chaque événement B1 et B2 se produise si A se produit et la probabilité que B1 et B2 se produisent ensemble.
Données et configuration
Pour cette démonstration, on va utiliser le jeu de données Titanic. Il s'agit d'un ensemble de données concernant tous les passagers du Titanic. Il contient des informations sur les passagers et indique s'ils ont survécu ou non au naufrage.
Il s'agit d'un ensemble de données couramment utilisé pour l'apprentissage automatique. C'est en partie parce qu'il est petit, mais aussi parce qu'il est facile de prédire le résultat en utilisant uniquement le sexe et la classe d'un passager. Par exemple, plus de 95 % des femmes de première classe ont survécu, contre seulement 15 % des hommes de troisième classe.
On a classé au hasard 80 % des passagers comme données d'entraînement. Dans l'apprentissage automatique, vous utilisez les données d'entraînement pour attribuer des valeurs aux paramètres de l'équation. Dans notre cas, les données d'apprentissage sont utilisées pour calculer les valeurs des variables du côté droit des équations ci-dessus. On utilisera ces valeurs pour prédire la survie des passagers dans les données de test.
Dans une application réelle, les données d'apprentissage seraient toutes les données historiques du rapport. Par conséquent, un rapport comme celui-ci contiendrait des données pour l'analyse descriptive et diagnostique, tout en offrant certaines capacités prédictives.
Toutes les données se trouvent dans un tableau avec une colonne « inTrain » pour différencier les données utilisées pour l'apprentissage du model de celles utilisées pour tester l'efficacité de l'algorithme (Train/Test). Les autres colonnes importantes sont la classe, le sexe et la survie. L'image ci-dessous présente un échantillon des données.
Construction de modèle à l'aide de mesures
Dans cette démonstration, on va construire le modèle à l'aide de mesures. Il y aura des mesures pour chacune des variables de l'équation.
Voici un exemple de calcul à effectuer pour prédire la survie d'un homme de 2e classe :
À partir des données d'apprentissage, nous avons besoin de mesures qui calculent
la probabilité totale qu'un passager ait survécu
Parmi les passagers qui ont survécu
Quelle est la proportion de passagers de 2ème classe ?
Quelle est la proportion d'hommes ?
La probabilité qu'un passager soit à la fois un homme et une personne de deuxième classe.
Pour commencer, on a créé quelques mesures DAX pour calculer le nombre de passagers dans l'ensemble d'apprentissage et le nombre de ceux qui ont survécu.
Passenger Count = CALCULATE ( COUNTROWS ( 'titanic' ), ALL ( 'titanic' ), 'titanic'[inTrain] = "Yes" ) Survived Count = CALCULATE ( COUNTROWS ( 'titanic' ), ALL ( 'titanic' ), 'titanic'[inTrain] = "Yes", 'titanic'[Survived] = 1 )
La première mesure est la probabilité de survie d'un passager. Il s'agit simplement du nombre de passagers qui ont survécu, divisé par le nombre de passagers.
pSurived = DIVIDE ( [Survived Count], [Passenger Count] ) + 0
On a ensuite créé une mesure pour calculer la probabilité qu'un passager fasse partie d'une certaine classe, s'il survit. Cette mesure détermine la classe d'un passager, puis compte le nombre de passagers qui faisaient également partie de cette classe et qui ont survécu. Enfin, ce nombre est divisé par le nombre total de survivants.
pclass given survival = VAR class = SELECTEDVALUE ( 'titanic'[Class] ) VAR inClass = CALCULATE ( COUNTROWS ( 'titanic' ), ALL ( 'titanic' ), 'titanic'[inTrain] = "Yes", 'titanic'[Survived] = 1, 'titanic'[Class] = class ) RETURN DIVIDE ( inClass, [Survived Count] ) + 0
Ensuite, les chances d'être d'un certain sexe et de survivre. La logique est similaire à la mesure ci-dessus, mais en utilisant le sexe au lieu de la classe.
psex given survival = VAR sex = SELECTEDVALUE ( 'titanic'[Sex] ) VAR isSex = CALCULATE ( COUNTROWS ( 'titanic' ), ALL ( 'titanic' ), 'titanic'[inTrain] = "Yes", 'titanic'[Survived] = 1, 'titanic'[Sex] = sex ) RETURN DIVIDE ( isSex, [Survived Count] ) + 0
Au dénominateur, on calcule la probabilité totale qu'un passager soit à la fois d'un certain sexe et d'une certaine classe.
psex and class = VAR sex = SELECTEDVALUE ( 'titanic'[Sex] ) VAR class = SELECTEDVALUE ( 'titanic'[Class] ) VAR inSexClass = CALCULATE ( COUNTROWS ( 'titanic' ), ALL ( 'titanic' ), 'titanic'[inTrain] = "Yes", 'titanic'[Sex] = sex, 'titanic'[Class] = class ) RETURN DIVIDE ( inSexClass, [Passenger Count] ) + 0
Toutes ces mesures sont ensuite regroupées en une seule mesure finale pour donner la probabilité de survie.
psurvival given sex and class = DIVIDE ( [pSurived] * [pSex given Survival] * [pClass given Survival], [pSex and Class] )
Valider le modèle
Une fois que vous avez un modèle, l'étape suivante consiste à le valider pour voir s'il est efficace. Pour cette raison, on exclu 20 % des passagers de l'ensemble de formation. Ils se trouvent dans l'ensemble de test et seront utilisés pour la validation.
Le résultat du modèle est une probabilité dont les valeurs sont comprises entre 0 et 1. Les valeurs les plus élevées prédisent la survie et les valeurs les plus faibles prédisent la mort. Toutefois, cette valeur est relative à l'ensemble de données. Nous devons déterminer quel point de cette plage de valeurs représente le plus précisément le seuil entre une probabilité de survie élevée et une probabilité de survie faible en le testant.
Pour prendre une décision, nous devons supposer qu'il existe une valeur de division, ou valeur seuil, dans la fourchette de probabilité. Les probabilités supérieures à ce seuil prédisent la survie, tandis que les probabilités inférieures prédisent la mort.
Pour commencer, on va créer un tableau, comme, avec une gamme de valeurs seuils possibles.
Thresholds = GENERATESERIES ( 0, 1, 0.05 )
On a ensuite créé une mesure qui utilisera les valeurs de ce tableau pour évaluer la précision d'une prédiction pour une valeur seuil donnée. Cette mesure itère sur l'ensemble des tests et évalue le modèle pour chaque passager. Si l'on prédit que le passager survivra et qu'il survit, il s'agit d'un vrai positif.
De même, les passagers décédés dont la probabilité est inférieure au seuil sont classés dans la catégorie des vrais négatifs. Le contraire d'un vrai positif ou d'un vrai négatif est un faux positif ou un faux négatif. C'est le cas lorsque le modèle prédit le contraire de ce qui s'est passé.
Correct % = VAR threshold = SELECTEDVALUE ( 'Thresholds'[Value] ) VAR test = CALCULATETABLE ( 'titanic', 'titanic'[inTrain] = "No" ) RETURN AVERAGEX ( test, VAR pSurvival = [pSurvival given Sex and Class] VAR survived = 'titanic'[Survived] RETURN SWITCH ( TRUE (), AND ( pSurvival >= threshold, survived = 1 ), 1, //True Positives AND ( pSurvival < threshold, survived = 0 ), 1, //True Negatives 0 //False Positive or Negative ))
Nous pouvons ensuite utiliser cette mesure dans un graphique linéaire.
Comme nous pouvons le voir sur le graphique, si nous supposons un seuil d'environ 0,7, nous pouvons prédire avec précision le résultat de plus de 77 % des passagers. Ce modèle est donc assez efficace pour prédire la mortalité d'un passager.
Dans un scénario réel, il faut déterminer quel niveau de précision est acceptable. Aucun modèle ne sera jamais correct à 100 %, mais ce n'est souvent pas nécessaire pour être utile.
Conclusion
Dans cet article, on a démontré comment implémenter un simple modèle prédictif Naive Bayes dans Power BI en utilisant uniquement DAX. Ce type d'approche peut être très utile pour créer rapidement des modèles prédictifs simples dans Power BI et faire passer vos rapports au niveau supérieur.