je travaille actuellement sur la résiliation de contrats en assurance. Il m'ai demandé de construire un zonier comportemental mesurant le risque de résiliation à la maille "commune" sur la France. Pour ce faire je possède une BDD contenant des millions de contrats différents. La variable cible spécifie si il y a eu résiliation ou non du contrat d'assurance. J'ai donc effectué une régression logistique sur cette variable et j'ai déjà pu projeter les résidus de cette dernière sur une carte.
Mon problème se situe au niveau de l'interpolation spatiale. Il y a de nombreuses communes où les contrats sont inexistants. Il faut donc prévoir le risque sur ces zones. Après quelques recherches, j'ai décidé d'utiliser la méthode du Krige qui semble être la plus adaptée dans le domaine. Cependant après avoir effectué le variogramme, la fonction krige tourne indéfiniment. J'aimerais donc savoir si ma démarche est la bonne et si elle ne comporte pas d'erreurs.
J'ai donc mon dataframe res_auto contenant les latitudes et longitudes (x et y) des communes et leur résidu associé. (36742 lignes)
Code : Tout sélectionner
> head(res_auto)
# A tibble: 6 x 4
commune x y residus_resil
<chr> <dbl> <dbl> <dbl>
1 32460 43.7 -0.188 0.144
2 51141 48.8 4.54 0
3 77130 48.9 2.93 0.229
4 63379 46.0 3.13 0.265
5 62050 50.4 2.10 0.341
6 13020 43.4 5.53 0.354
J'assigne au dataframe les coordonnées x et y créant ainsi un spatialpoints dataframe puis j'applique le variogramme sur les résidus en omettant les valeurs manquantes. "nugget" est déterminé via le plot de auto_vgm.
Code : Tout sélectionner
miss <- which(is.na(res_auto$residus_resil))
no_miss <- which(!is.na(res_auto$residus_resil))
auto_vgm <- variogram(residus_resil ~ x + y, res_auto[no_miss, ])
vgm.fit<-fit.variogram(auto_vgm,vgm(model="Sph", nugget = 0.02), fit.sills = TRUE, fit.ranges = TRUE)
plot(auto_vgm,vgm.fit)
auto_vgm me donne ceci :
Code : Tout sélectionner
> auto_vgm
np dist gamma dir.hor dir.ver id
1 158116884 1.877717 0.01969131 0 0 var1
2 249386291 4.588087 0.01936867 0 0 var1
3 101074254 7.176633 0.02056242 0 0 var1
4 9493121 10.133665 0.02033806 0 0 var1
5 494460 13.245340 0.02644974 0 0 var1
6 2205 15.452550 0.01954190 0 0 var1
et le vgm.fit ce qui suit :
Code : Tout sélectionner
> vgm.fit
model psill range
1 Nug 0.02267848 0.00000
2 Sph 0.00000000 5.15085
Il se trouve que les points sont tous quasiment alignées et que le plot de vgm.fit donne donc une droite horizontale. Dois-je en déduire qu'il n'existe pas de corrélation spatiale entre les résidus ?
Par la suite j'exécute la fonction krige en prenant comme newdata les communes sans résidus.
Code : Tout sélectionner
km <- krige(residus_resil ~ x + y, res_auto[no_miss, ], newdata = res_auto[miss, ], model = vgm.fit)
Cependant le code tourne indéfiniment. Ai-je fait une erreur quelque part ?