Suite à une question sur l'utilisation des arbres en tarification automobile (ici), je vais revenir sur la construction des classes, de manière "plus pratique".

Commençons par l'utilisation du critère du chi-deux,
http://perso.univ-rennes1.fr/arthur.charpentier/latex/arbre-comp-01.png
où, classiquement
http://perso.univ-rennes1.fr/arthur.charpentier/latex/arbre-comp-02.png
On va donc couper la variable âge en deux classes, disons [18,a] (notée A) et [a+1,90] (notée B). On va alors attribuer à a toutes les valeurs possibles et imaginables, entre 18 et 90 (le minimum et le maximum des données observées). On obtient alors les valeurs suivantes

Autrement dit, le découpage qui permet d'avoir des classes les moins indépendantes possibles serait [18-27] et [28-90]. Une fois constituée cette séparation, on va continuer. On va alors chercher à couper un des deux groupes en deux. Autrement dit, on aura trois classes,
  • [18,b] (notée A), [b+1,27] (notée B) et [28,90] (notée C)
  • [18,27] (notée A), [28,b] (notée B) et [b+1,90] (notée C)
On calcule alors la distance du chi-deux entre les deux variables,
http://perso.univ-rennes1.fr/arthur.charpentier/latex/arbre-comp-05.png
et on a les valeurs suivantes,

Autrement dit, cette fois on nous recommande le découpage [18-27], [28-75] et [76-90]. Mais on peut essayer de changer de critère, par exemple on peut calculer l'entropie, avec pour commencer un découpage en deux classes,
http://perso.univ-rennes1.fr/arthur.charpentier/latex/arbre-comp-03.png
soit numériquement,

ou avec trois classes,
http://perso.univ-rennes1.fr/arthur.charpentier/latex/arbre-comp-06.png

Enfin, on peut aussi utiliser le critère de Gini, là aussi pour constituer deux classes,
L'image “http://perso.univ-rennes1.fr/arthur.charpentier/latex/arbre-comp-04.png” ne peut être affichée car elle contient des erreurs.

ou pour séparer en trois classes,

http://perso.univ-rennes1.fr/arthur.charpentier/latex/arbre-comp-07.png

soit, numériquement,

Bref, sur cet exemple, quelle que soit la méthode de découpage retenu, on arrive au même découpage. Ah oui, le code sous R est assez simple (mais loin d'être optimal),

> B=read.table("D:\\base-continuite-classe-logistique.txt")
> u=sort(unique(B$age))
> gini=entropie=chideux=rep(NA,length(u))
> for(i in 2:(length(u))){
+ I=B$age<(u[i]-.5)
+ ft1=sum(B$Y[I==TRUE])/nrow(B)
+ ff1=sum(B$Y[I==FALSE])/nrow(B)
+ ft0=sum(1-B$Y[I==TRUE])/nrow(B)
+ ff0=sum(1-B$Y[I==FALSE])/nrow(B)
+ M=matrix(c(ft0,ff0,ft1,ff1),2,2)
+ ft=ft0+ft1
+ f0=ft0+ff0
+ Mind=matrix(c(ft*f0,f0*(1-ft),(1-f0)*ft,(1-f0)*(1-ft)),2,2)
+ Q=sum(nrow(B)*(M-Mind)^2/Mind)
+  entropie[i] = -((ft1+ft0)*(ft1/(ft1+ft0)*log(ft1/(ft1+ft0))+
+           ft0/(ft1+ft0)*log(ft0/(ft1+ft0))) +
+                  (ff1+ff0)*(ff1/(ff1+ff0)*log(ff1/(ff1+ff0))+
+           ff0/(ff1+ff0)*log(ff0/(ff1+ff0)))
+ )
+
+  gini[i] = -((ft1+ft0)*(ft1/(ft1+ft0)*(1-ft1/(ft1+ft0))+
+           ft0/(ft1+ft0)*(1-ft0/(ft1+ft0))) +
+                  (ff1+ff0)*(ff1/(ff1+ff0)*(1-ff1/(ff1+ff0))+
+           ff0/(ff1+ff0)*(1-ff0/(ff1+ff0))))
+
+ chideux[i] = Q
+ }
> plot(u-.5,entropie,type="b",pch=19,col="blue",
+ ylab="Entropie ou déviance",xlab="Age du conducteur")
> n=which.min(entropie)
> points(u[n]-.5,entropie[n],pch=19,col="red",cex=1.5)