[PYTHON] Score de puissance prédictif pour la sélection des fonctionnalités

Sélection de fonctionnalité

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

Principales caractéristiques

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.

Comment calculer le PPS

  1. Déterminez la relation entre deux quantités d'entités ou entre les quantités d'entités et les variables cibles comme problème de régression ou de classification, selon le type de données et le nombre de niveaux (cardinalité).
  2. Prétraitement tel que l'exclusion des valeurs manquantes, le codage à chaud des caractéristiques des catégories et le codage des étiquettes des cibles
  3. Calculez le SPP selon différentes formules de définition du SPP pour chaque problème de régression et problème de classification.

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.

Utilisation lors de la sélection de la quantité de fonctionnalités

Utilisation autre que la sélection de fonctionnalités

  1. Trouvez des modèles dans les données

  2. Détection de fuite de données

  3. 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.

  4. 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.

Présentation de la bibliothèque

Installation

pip install ppscore

Importation et calcul des scores

import ppscore as pps
pps.score(df, "feature_column", "target_column")

Sortie de la matrice PPS

pps.matrix(df)

Je l'ai en fait appliqué aux données

Données d'utilisation et environnement

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. image.png 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.

Préparation

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

Calcul PPS

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')}

Visualisation de la matrice PPS

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()

image.png

finalement

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.

Informations de référence

Recommended Posts

Score de puissance prédictif pour la sélection des fonctionnalités
Unité 5 Ingénierie des fonctionnalités pour la sélection des fonctionnalités d'apprentissage automatique
Ensembles de données de sélection de fonctionnalités
Prétraitement des fonctionnalités pour la modélisation
Sélection des fonctionnalités par sklearn.feature_selection
Sélection des caractéristiques par algorithme génétique
pp4 (puissance python pour tout)
Sélection de fonctionnalités par importances nulles