Regroupement optimal par rapport à une variable de réponse donnée

11

Je recherche une méthode de binning optimale (discrétisation) d'une variable continue par rapport à une variable binaire de réponse (cible) donnée et avec un nombre maximum d'intervalles comme paramètre.

exemple: J'ai un ensemble d'observations de personnes avec des variables "hauteur" (numéral continu) et "has_back_pains" (binaire). Je veux discrétiser la hauteur en 3 intervalles (groupes) au plus avec une proportion différente de personnes souffrant de maux de dos, afin que l'algorithme maximise la différence entre les groupes (avec des restrictions données par exemple, que chaque intervalle ait au moins x observations).

La solution évidente à ce problème serait d'utiliser des arbres de décision (un modèle simple à une variable), mais je ne trouve aucune fonction dans R qui aurait un "nombre maximal de branches" comme paramètre - toutes divisent la variable en 2 gropus (<= x et> x). Le mineur SAS a un paramètre de "branche maximale" mais je recherche une solution non commerciale.

certaines de mes variables n'ont que quelques valeurs uniques (et pourraient être traitées comme des variables discrètes) mais je veux les discrétiser également dans un plus petit nombre d'intervalles.

La solution la plus proche de mon problème est implémentée dans le paquet smbinning dans R (qui repose sur la fonction ctree du paquet parti) mais il a deux inconvénients: il est impossible de définir le nombre d'intervalles (cependant, vous pouvez trouver un moyen de le contourner en changeant le paramètre p) et cela ne fonctionne pas lorsque le vecteur de données a moins de 10 valeurs uniques. Quoi qu'il en soit, vous pouvez voir l'exemple de sortie ici (les colonnes Cutpoint et Odds sont cruciales):

Cutpoint CntRec CntGood CntBad CntCumRec CntCumGood CntCumBad PctRec BadRate   Odds  LnOdds     WoE     IV
1   <= 272   9081     169   8912      9081        169      8912 0.1874  0.9814 0.0190 -3.9653 -0.6527 0.0596
2   <= 311   8541     246   8295     17622        415     17207 0.1762  0.9712 0.0297 -3.5181 -0.2055 0.0068
3   <= 335   2986     163   2823     20608        578     20030 0.0616  0.9454 0.0577 -2.8518  0.4608 0.0163
4  Missing  27852    1125  26727     48460       1703     46757 0.5747  0.9596 0.0421 -3.1679  0.1447 0.0129
5    Total  48460    1703  46757        NA         NA        NA 1.0000  0.9649 0.0364 -3.3126  0.0000 0.0956

Oh, je suis parfaitement conscient que le binning entraîne une perte d'informations et qu'il existe de meilleures méthodes, mais je vais l'utiliser pour la visualisation des données et traiter ces variables comme un facteur.

Dominix
la source
SPSS a la commande Optimal Binning. Google SPSS Algorithms Optimal Binning.
ttnphns
Avez-vous vu ce post stackoverflow.com/questions/7018954/… Il mentionne l'utilisation de la valeur de l'information mais ne précise pas ce que cela signifie par IV = 1, ou n'explique pas comment l'obtenir
Adam

Réponses:

6

En lisant ce livre ici (Nagarajan, 2103 [1]), je suis tombé sur cette information précieuse que je cite sans vergogne ici:

  • Utilisation des connaissances préalables sur les données. Les limites des intervalles sont définies, pour chaque variable, pour correspondre à des scénarios du monde réel sensiblement différents, tels que la concentration d'un polluant particulier (absent, dangereux, mortel) ou des classes d'âge (enfant, adulte, personne âgée).

  • Utiliser l'heuristique avant d'apprendre la structure du réseau. Quelques exemples sont: les règles de Sturges, Freedman-Diaconis ou Scott (Venables et Ripley, 2002).

  • Choisir le nombre d'intervalles et leurs limites pour équilibrer la précision et la perte d'informations (Kohavi et Sahami, 1996), encore une variable à la fois et avant que la structure du réseau ne soit apprise. Une approche similaire considérant des paires de variables est présentée dans Hartemink (2001).

  • Effectuer l'apprentissage et la discrétisation de manière itérative jusqu'à ce qu'aucune amélioration ne soit apportée (Friedman et Goldszmidt, 1996).

Ces stratégies représentent différents compromis entre l'exactitude de la représentation discrète des données d'origine et l'efficacité de calcul de la transformation.

Ces informations sont fournies, au cas où vous voudriez justifier la méthode de binning que vous souhaitez utiliser et pas seulement utiliser un package directement.

[1]: Nagarajan R. (2013),
Réseaux Bayésiens en R, avec Applications en Biologie des Systèmes
Springer

KarthikS
la source
3

Essayez le package d'informations pour R. https://cran.r-project.org/web/packages/Information/Information.pdf https://cran.r-project.org/web/packages/Information/vignettes/Information-vignette .html

Le paquet d'informations a des fonctionnalités pour calculer WoE et IV (le nombre de cases est un paramètre flexible, la valeur par défaut est 10) et est un instrument pratique pour l'exploration des données et par conséquent pour le binning. La sortie ne contient cependant pas de cotes; et il n'est pas possible de spécifier zéro comme un bac séparé (pour mes tâches, zéro est souvent un bac valide à part entière); et ce serait bien d'obtenir une sortie du paquet d'informations qui serait comme celle de smbinning. Cependant, cela étant dit des fonctionnalités intéressantes du package d'informations, mais pas encore disponibles, d'autres packages R pour WoE et IV (malheur, klaR) n'ont pas donné l'impression d'instruments aussi utiles que le package d'informations, en fait, je n'a pas réussi à les exécuter après 2-3 tentatives. Pour la tâche de dscrétisation / binning, les packages d'informations et de regroupement peuvent fonctionner correctement ensemble,

Pour le binning réel, j'ai utilisé data.table au lieu de la fonction cut (). Voir le lien vers mon article ci-dessous, il contient du code générique tout en bas de la question initiale: /programming/34939845/binning-variables-in-a-dataframe-with-input-bin-data- à partir d'une autre trame de données

J'espère que cela aide.

Akonza
la source
@kjetil, kjetil b halvorsen, vous avez raison. Le paquet d'informations a une fonctionnalité pour calculer WoE et IV (le nombre de cases est un paramètre flexible, la valeur par défaut est 10) et est un instrument pratique pour l'exploration de données et conséquente pour le binning. La sortie ne contient cependant pas de cotes. Et il n'est pas possible de spécifier zéro comme un bac séparé (pour mes tâches, zéro est souvent un bac valide à part entière). Les autres packages R pour WoE et IV (malheur, klaR) ne donnaient pas l'impression d'instruments aussi utiles que le package Information. Ainsi, les informations et le package smbinning peuvent fonctionner ensemble comme une combinaison.
Akonza