Pour répondre à une question rapide, la robustesse des arbres dépend de deux choses: du nombre d'observations (plus il y a d'observations, plus les nœuds seront stables), et de l'hétérogénéité entre les classes (plus les classes sont différentes, plus il sera facile de les distinguer). Pour faire simple, considérons un petit modèle binomial à trois classes (avec une unique variable explicative), par exemple si on simule 1000 valeurs,
m=c(.2,.5,.3) moyenne=function(x){ return(m[1]*(x<3)+m[2]*((x>=3)&(x<=7))+m[3]*(x>7)) } MY=Vectorize(moyenne) set.seed(1) n=1000 U=runif(n)*10 Y=rbinom(n,size=1,prob=MY(U)) plot(U,Y,ylim=c(-.1,1.1)) library(splines) base=data.frame(Y,U) reg=glm(Y~bs(U,10),data=base,family=binomial) u=seq(0,10,by=.01) y=predict(reg,newdata=data.frame(U=u),type="response") lines(u,y,lwd=2,col="blue") lines(u,MY(u),lwd=2,col="red",type="s")

Si on simule quelques milliers d'échantillons, on peut regarder la distribution de mes nœuds (si le découpage par arbre converge), en gardant - au mieux - que deux nœuds,
set.seed(1) N=matrix(NA,10000,2) n=1000 for(s in 1:1000){ U=runif(n)*10 Y=rbinom(n,size=1,prob=MY(U)) T=tree(Y~U) noeud=T$frame$splits[,1] noeud=noeud[noeud!=""] NOEUD=as.numeric(substr(noeud,2,nchar(noeud))) N[s,]=NOEUD[1:2] } vn=as.vector(N) vn=vn[is.na(vn)==FALSE] plot(density(vn,bw=.2),col="blue",lwd=2,xlim=c(0,10)) abline(v=c(3,7),col="red")

Rappelons que l'on a ici 1000 observations pour faire notre régression, avec trois classes, dont les valeurs moyennes par classe sont respectivement 20%, 50% et 30%. On note que l'on coupe bien entre les deux premières classes, un peu moins bien entre les deux dernières.
Si on suppose que les classes sont moins différentes, par exemple avec des valeurs moyennes à 30%, 50% et 40%, on obtient visuellement la distribution suivante pour les nœuds,

En l’occurrence, on a beaucoup de mal à distinguer entre les deux dernières classes.
Si on change la taille de notre échantillon, en passant de 1000 à 200, on s'aperçoit (en revenant aux valeurs précédentes des taux par classes) que l'on a beaucoup de mal à estimer correctement les nœuds,

De manière assez surprenante, il va prendre des nœuds proches des bords (proches de 0 et de 10).
Moralité, les classes obtenues par arbre ne sont robustes qu'à condition d'avoir suffisamment d'observations, et d'avoir des classes réellement différentes.
En relisant les devoirs maisons, je me suis rendu compte que certains avaient tenté de regrouper les régions (géographiques) par régions homogènes. Sauf que les régions étaient codées par un numéro (selon la
Bon, R a la mauvaise idée de recoder les classes (mais il garde l'ordre, i.e. a correspond à la région 41, b à 54, c à 73 et d à 82). Visuellement, on retient qu'il est possible de considérer deux grandes régions, ac (i.e. 41 et 73) et bd (i.e. 54 et 72). L'intérêt des arbres sur des variables qualitatives, des facteurs, c'est que tous les regroupements sont possibles. En revanche, si on fait un arbre sur la région qui est lue en tant que nombre (quantitatif), on obtient
Il est alors impossible de regrouper dans une même classe deux régions séparées par un nombre, i.e. on ne peut regrouper 41 et 82 dans la même classe. R suggère de distinguer peut être trois régions, à savoir 82 (à droite), puis 73 (au centre) et enfin de mettre éventuellement 41 et 54 ensemble. Ce qui n'est pas la stratégie optimale quand on regroupe des facteurs.

























