Dans cet article, nous présenterons l'indice Predictive Power Score publié en avril de cette année, qui peut être utilisé pour la sélection de la quantité de fonctionnalités, et la bibliothèque ppscore qui l'implémente.
À propos, lors de la création d'un modèle de prédiction, la sélection de la quantité de caractéristiques et des variables explicatives à utiliser est appelée sélection de la quantité de caractéristiques.
--Réduire le bruit des données sans rapport avec la prédiction --Réduire les données redondantes pour réduire les coûts de calcul
C'est fait dans le but de.
Les méthodes de sélection de montant de fonction peuvent être classées de la manière suivante. Le Predictive Power Score est équivalent à la méthode Wrapper, mais il présente également les avantages de la méthode Filter en raison de son implémentation.
Méthode | Aperçu | Fonctionnalité |
---|---|---|
Filter | Sélectionnez la quantité de fonction en calculant les statistiques des données elles-mêmes, en définissant un seuil et en coupant. | Relativement le moins coûteux en calcul et adapté aux grands ensembles de données |
Embedded | Sélectionnez des fonctionnalités et créez un modèle en même temps, comme la régularisation | Possède des caractéristiques intermédiaires entre la méthode Filter et la méthode Wrapper |
Wrapper | Sélectionnez les fonctionnalités utiles pour la prédiction en répétant la construction du modèle et la sélection des fonctionnalités. | Puisque le modèle est réellement construit, il est possible de sélectionner avec précision des caractéristiques utiles pour la prédiction, mais le coût de calcul est élevé. |
Predictive Power Score
Predictive Power Score (ci-après dénommé PPS) est un concept développé par une société de logiciels appelée 8080Labs basée en Allemagne. Il peut être utilisé sous une forme similaire à l'analyse utilisant la matrice de corrélation du coefficient de corrélation de Pearson, qui est souvent utilisé dans EDA, etc., afin qu'il puisse être utilisé plus universellement. Il semble qu'il soit développé avec la motivation de faire un bon indice.
PPS a les caractéristiques suivantes.
La formule de définition mentionnée en 2. est celle indiquée dans le tableau ci-dessous.
tâche | Formule de définition de calcul PPS |
---|---|
Revenir | PPS = 1 - (MAE_model / MAE_naive) |
Classification | PPS = (F1_model - F1_naive) / (1 - F1_naive) |
MAE_model
et MAE_naive
sont MAE lors de la prédiction de y en utilisant x, respectivement, et MAE lors de la prédiction de la valeur médiane de y. La raison du calcul de «_naive» est de définir la norme de normalisation du PPS dans la plage de 0 à 1.
Dans le cas de F1_naive
, la [F1] pondérée (https://en.wikipedia.org/wiki/F1_score) pour la classe la plus fréquente est calculée.
Vous vous demandez peut-être ici, mais comment faites-vous une «prédiction»?
Elle est équivalente à la méthode Wrapper, mais elle a également les avantages de la méthode Filter d'après le contenu de l'implémentation.
Comme mentionné ci-dessus, le calcul de PPS peut être classé dans la méthode Wrapper dans le contexte de la sélection de caractéristiques, mais la prédiction est faite en construisant un modèle d'arbre de décision et le score est médié par le modèle. (Construction d'un modèle par validation croisée lors du calcul du score) Cependant, calculez le PPS une fois. Une fois que vous avez fait cela, vous pouvez placer l'ensemble de fonctionnalités réduit dans un modèle plus compliqué, afin de pouvoir l'utiliser comme méthode de filtrage. En effet, comme le disent les développeurs, nous construisons un modèle d'arbre de décision simple à une variable lors du calcul du score, et l'arbre de décision lui-même est plus rapide que SVM, GBDT, NN, etc. .. Une autre raison pour laquelle il est utilisé est que s'il s'agit d'un arbre de décision, une relation non linéaire peut être capturée et les performances de prédiction sont relativement robustes.
Trouvez des modèles dans les données
Détection de fuite de données
Puisque le PPS est calculé à la fois pour les variables catégorielles et les variables numériques, il est commode de trouver des relations incluant la non-linéarité entre diverses variables.
Si le PPS est significativement plus élevé que d'autres fonctionnalités, on peut soupçonner que les fonctionnalités peuvent contribuer à la fuite, qui contient beaucoup d'informations qui ne peuvent pas être utilisées au moment de la prédiction.
pip install ppscore
import ppscore as pps
pps.score(df, "feature_column", "target_column")
pps.matrix(df)
Taux de désabonnement des clients télécoms est un ensemble de données relatives aux informations client et aux informations d'annulation des services Internet. L'environnement utilise le cahier de Kaggle. Il y a un bouton bleu sur la page du jeu de données appelé "Nouveau bloc-notes" qui lancera le bloc-notes de manière à ce que vous puissiez y accéder immédiatement.
Installez-le.
!pip install ppscore
Importez la bibliothèque et chargez les données.
import numpy as np
import pandas as pd
import ppscore as pps
import seaborn as sns
import matplotlib.pyplot as plt
import os
for dirname, _, filenames in os.walk('/kaggle/input'):
for filename in filenames:
print(os.path.join(dirname, filename))
PATH ='/kaggle/input/telco-customer-churn/WA_Fn-UseC_-Telco-Customer-Churn.csv'
df = pd.read_csv(f'{PATH}')
df.shape
Vérifiez le nom de la colonne.
list(df.columns)
«Churn» est la cible.
['customerID',
'gender',
'SeniorCitizen',
'Partner',
'Dependents',
'tenure',
'PhoneService',
'MultipleLines',
'InternetService',
'OnlineSecurity',
'OnlineBackup',
'DeviceProtection',
'TechSupport',
'StreamingTV',
'StreamingMovies',
'Contract',
'PaperlessBilling',
'PaymentMethod',
'MonthlyCharges',
'TotalCharges',
'Churn']
Vérifiez le type de données.
df.dtypes
customerID object
gender object
SeniorCitizen int64
Partner object
Dependents object
tenure int64
PhoneService object
MultipleLines object
InternetService object
OnlineSecurity object
OnlineBackup object
DeviceProtection object
TechSupport object
StreamingTV object
StreamingMovies object
Contract object
PaperlessBilling object
PaymentMethod object
MonthlyCharges float64
TotalCharges object
Churn object
dtype: object
pps.score(df, 'InternetService', 'Churn')
Les résultats sont renvoyés au format dictionnaire.
{'x': 'InternetService',
'y': 'Churn',
'task': 'classification',
'ppscore': 1.625853361551631e-07,
'metric': 'weighted F1',
'baseline_score': 0.6235392486748098,
'model_score': 0.6235393098818076,
'model': DecisionTreeClassifier(ccp_alpha=0.0, class_weight=None, criterion='gini',
max_depth=None, max_features=None, max_leaf_nodes=None,
min_impurity_decrease=0.0, min_impurity_split=None,
min_samples_leaf=1, min_samples_split=2,
min_weight_fraction_leaf=0.0, presort='deprecated',
random_state=None, splitter='best')}
En regardant la matrice, dans la ligne «Churn», le PPS de chaque quantité d'entités pour la cible est représenté par une carte de chaleur, en particulier le PPS de «tenure», «MonthlyCharges» et «TotalCharges» est élevé. La signification de chacun est la période d'utilisation du service, les frais d'utilisation mensuels et les frais d'utilisation cumulés, qui sont des quantités caractéristiques étroitement liées à l'annulation. De plus, si vous regardez la ligne «Charges mensuelles», le contraste PPS entre «Service Internet» et «Stream TV» est élevé. Comme vous pouvez le voir à partir du type de données ci-dessus, ces fonctionnalités sont des variables catégorielles, mais il est pratique de pouvoir voir la relation avec la variable numérique «Charges mensuelles» ensemble. Il est facile à interpréter et vous pouvez voir que le statut d'abonnement aux options de divers services Internet est fortement lié aux frais d'utilisation. De plus, en regardant le PPS entre les caractéristiques du «service Internet» et du «StreamTV», il est déduit qu'ils ont des informations similaires entre eux, et il est possible d'envisager une compression de dimension et une réduction de dimension. Je vais.
Le calcul de la matrice a pris 1 minute 55 secondes dans la trame de données (7043, 21). Il n'est pas trop tôt, mais si vous avez 10 000 unités de données, vous pouvez attendre un moment, et si le nombre de données augmente, vous pouvez essayer d'échantillonner pour obtenir une tendance.
df_matrix = pps.matrix(df)
plt.figure(figsize=(18,18))
sns.heatmap(df_matrix, vmin=0, vmax=1, cmap="Blues", linewidths=0.5, annot=True)
plt.show()
Jusqu'à présent, nous avons introduit le Predictive Power Score (PPS). Puisqu'il peut être facilement appliqué aux données et que les relations entre les données peuvent être facilement visualisées, il a été constaté qu'il peut être utilisé à la fois pour l'EDA et la sélection de quantité d'entités. L'implémentation de ppscore utilise MAE et F1 pour calculer le PPS, mais vous pouvez essayer d'autres indicateurs tout en incorporant le concept de PPS.
Recommended Posts