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.
la source
SPSS Algorithms Optimal Binning
.Réponses:
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
la source
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.
la source