MSS

PROJET OPEN DATA - L'AVENIR DES ANIMAUX DE REFUGE À AUSTIN

Théophile BARANGER et Valentin BARTKOWIAK


Introduction

Dans ce rapport, nous allons nous intéresser à l'avenir des animaux accueillis dans un refuge de la ville d'Austin, au Texas. Ces données proviennent du site web de données ouvertes d'Austin, TX et sont continuellement mises à jour.

Plus spécifiquement, nous allons nous intéresser à deux jeux de données complémentaires :

Afin de rester dans l'esprit des données ouvertes, nous avons rendu disponible l'intégralité de notre code et les données utilisées. Les sources de ce rapport sont ainsi disponible en ligne dans un dossier Drive partagé.

Structure du rapport

Nous allons dans un premier temps procéder à une analyse descriptive exploratoire de ces données. L'objectif, au-delà de se familiariser avec les données, sera également de tester le lien entre certaines variables afin de constituer un sous-ensemble de données propice à l'entraînement et l'évaluation de modèles de prédiction. Nous proposerons ainsi à la suite de cette analyse exploratoire de construire un modèle prédictif permettant d'estimer la durée de séjour d'un animal au refuge ainsi que son sort futur (adoption, retour à son propriétaire, etc.) sur la base des données disponibles lors de son arrivée au refuge.

Nous nous intéresserons aux stratégies possibles pour l'entraînement de modèles de prédiction de variables bivariées, l'une étant ici qualitative (le type de sortie du refuge) et l'autre quantitative (la durée de séjour). En cela, ce projet représente une ouverture par rapport aux méthodes étudiées pendant notre formation, où les prédictions portent en général sur des variables unidimensionnelles et où l'entraînement de modèles d'apprentissage plus direct.

Outils utilisés

Voici l'ensemble des librairies que nous avons utilisées dans ce travail. Pour la manipulation des données, nous avons principalement utilisé les libraries NumPy et Pandas. Pour les graphiques, Matplotlib, notamment à travers Seaborn. Nous avons réalisé la carte animée qui suit à l'aide des librairies folium et GeoPy. Enfin, nous avons utilisé la librairie scikit-learn pour l'entraînement de modèles d'apprentissage supervisé.

Présentation des données

Commençons par donner un descriptif des données dont nous disposons.

  • Austin Animal Center Intakes :
    • Animal ID : Identifiant de l'animal (chaîne de caractères)
    • Name : Nom de l'animal (chaîne de caractères)
    • DateTime : Jour et heure d'entrée au refuge (Date-Heure)
    • MonthYear : Mois et année d'entrée au refuge (Mois-Année)
    • Found Location : Adresse (chaîne de caractère)
    • Intake Type : Type d'entrée au refuge (chaîne de caractère)
    • Intake Condition : Condition de l'animal à son entrée au refuge (chaîne de caractère)
    • Animal Type : Catégorie d'animal (chaîne de caractère)
    • Sex upon Intake : Sexe de l'animal (chaîne de caractère)
    • Age upon Intake : Âge de l'animal à son entrée au refuge (chaîne de caractère)
    • Breed : Sous-catégorie d'animal (chaîne de caractère)
    • Color : Couleur de l'animal (chaîne de caractère)
  • Austin Animal Center Outcomes :
    • Animal ID : Identifiant de l'animal (chaîne de caractères)
    • Name : Nom de l'animal (chaîne de caractères)
    • DateTime : Jour et heure de sortie du refuge (Date-Heure)
    • MonthYear : Mois et année de sortie du refuge (Mois-Année)
    • Date of Birth : Date de naissance (Date-Heure)
    • Outcome Type : Type de sortie du refuge (chaîne de caractère)
    • Outcome Subtype : Précision sur la sortie quand pertinent (chaîne de caractère)
    • Animal Type : Catégorie d'animal (chaîne de caractère)
    • Sex upon Outcome : Sexe de l'animal (chaîne de caractère)
    • Age upon Outcome : Âge de l'animal à sa sortie du refuge (chaîne de caractère)
    • Breed : Sous-catégorie d'animal (chaîne de caractère)
    • Color : Couleur de l'animal (chaîne de caractère)

Intakes - Entrées au refuge

Animal ID Name DateTime MonthYear Found Location Intake Type Intake Condition Animal Type Sex upon Intake Age upon Intake Breed Color
A786884 *Brock 01/03/2019 04:19:00 PM 01/03/2019 04:19:00 PM 2501 Magin Meadow Dr in Austin (TX) Stray Normal Dog Neutered Male 2 years Beagle Mix Tricolor
A706918 Belle 07/05/2015 12:59:00 PM 07/05/2015 12:59:00 PM 9409 Bluegrass Dr in Austin (TX) Stray Normal Dog Spayed Female 8 years English Springer Spaniel White/Liver
A724273 Runster 04/14/2016 06:43:00 PM 04/14/2016 06:43:00 PM 2818 Palomino Trail in Austin (TX) Stray Normal Dog Intact Male 11 months Basenji Mix Sable/White
A665644 NaN 10/21/2013 07:59:00 AM 10/21/2013 07:59:00 AM Austin (TX) Stray Sick Cat Intact Female 4 weeks Domestic Shorthair Mix Calico
A682524 Rio 06/29/2014 10:38:00 AM 06/29/2014 10:38:00 AM 800 Grove Blvd in Austin (TX) Stray Normal Dog Neutered Male 4 years Doberman Pinsch/Australian Cattle Dog Tan/Gray

Outcomes - Sorties du refuge

Animal ID Name DateTime MonthYear Date of Birth Outcome Type Outcome Subtype Animal Type Sex upon Outcome Age upon Outcome Breed Color
A794011 Chunk 05/08/2019 06:20:00 PM 05/08/2019 06:20:00 PM 05/02/2017 Rto-Adopt NaN Cat Neutered Male 2 years Domestic Shorthair Mix Brown Tabby/White
A776359 Gizmo 07/18/2018 04:02:00 PM 07/18/2018 04:02:00 PM 07/12/2017 Adoption NaN Dog Neutered Male 1 year Chihuahua Shorthair Mix White/Brown
A821648 NaN 08/16/2020 11:38:00 AM 08/16/2020 11:38:00 AM 08/16/2019 Euthanasia NaN Other Unknown 1 year Raccoon Gray
A720371 Moose 02/13/2016 05:59:00 PM 02/13/2016 05:59:00 PM 10/08/2015 Adoption NaN Dog Neutered Male 4 months Anatol Shepherd/Labrador Retriever Buff
A674754 NaN 03/18/2014 11:47:00 AM 03/18/2014 11:47:00 AM 03/12/2014 Transfer Partner Cat Intact Male 6 days Domestic Shorthair Mix Orange Tabby

Carte des collectes d'animaux

Dans cette partie nous avons cherché à représenter sur une carte dynamique les lieux de recueil des animaux arrivant au refuge. Pour ce faire nous avons dû dans un premier temps geocoder les adresses présentes dans notre jeu de données, c'est à dire attribuer à chacune d'entre elles des coordonnées géographiques de type latitude et longitude.

Ce travail a bien évidemment nécessité une étape de prétraitement de la variable adresse. Suite à ce prétraitement, nous nous sommes retrouvé avec environ $30\,000$ adresses différentes utilisables, ce qui correspond à environ la moitié des adresses différentes présentes dans le jeu de données. Ce nombre d'adresses s'est cependant révélé suffisant puisqu'il a permis de représenter sur notre carte interactive environ $120\,000$ animaux.

Sur notre carte dynamique, le code couleur est le suivant :

  • La couleur bleue correspond aux animaux de la catégorie Dog
  • La couleur orange correspond aux animaux de la catégorie Cat
  • La couleur verte correspond aux animaux de la catégorie Other.
Make this Notebook Trusted to load map: File -> Trust Notebook

Prétraitement

La première étape de notre travail est naturellement de rassembler les deux jeux de données initiaux par jointure sur les identifiants d'animaux. On cherche à conserver seulement les observations pour lesquelles on connaît l'entrée et la sortie de l'animal. Il est donc nécessaire de filtrer les entrées par exemple pour lesquelles la première sortie est antérieure à la première arrivée. De la même façon, certains animaux sortent deux fois du refuge pour une seule entrée. Nous avons donc tenté d'écarter toutes ces anomalies de façon à obtenir un jeu de données cohérent, où l'on sait pour chaque entrée au refuge quelle sera l'issue pour un animal.

Animal ID Animal Type Breed Intake Name Intake Type Intake Sex Intake Condition Intake DateTime Outcome DateTime Outcome Type Outcome Subtype Duration
A521520 Dog Border Terrier/Border Collie Nina Stray Spayed Female Normal 2013-10-01 07:51:00 2013-10-01 15:39:00 Return to Owner NaN 0 days 07:48:00
A664235 Cat Domestic Shorthair Mix NaN Stray Unknown Normal 2013-10-01 08:33:00 2013-10-01 10:39:00 Transfer Partner 0 days 02:06:00
A664236 Cat Domestic Shorthair Mix NaN Stray Unknown Normal 2013-10-01 08:33:00 2013-10-01 10:44:00 Transfer Partner 0 days 02:11:00
A664237 Cat Domestic Shorthair Mix NaN Stray Unknown Normal 2013-10-01 08:33:00 2013-10-01 10:44:00 Transfer Partner 0 days 02:11:00
A664233 Dog Pit Bull Mix Stevie Stray Intact Female Injured 2013-10-01 08:53:00 2013-10-01 15:33:00 Euthanasia Suffering 0 days 06:40:00

Prétraitement de la variable nom

Nous avons vérifié que les noms des animaux à leur entrée au refuge et à leur sortie correspondaient bien systématiquement. Ainsi, on ne conserve qu'une variable de nom. Cependant, la grande diversité des noms rendrait difficile l'utilisation de cette variable pour la construction de modèles prédictifs. Par curiosité, on décide de représenter les noms les plus communs donnés aux chiens et aux chats sous la forme de nuages de mots.

Ensuite, un certain nombre d'animaux accueillis au refuge n'ont pas de nom. On considère que cette information pourrait potentiellement être utile dans le cadre de modèles de prédiction, et donc on décide d'ajouter une variable binaire 'Named' qui vaudra 'Yes' si l'on connaît le nom de l'animal, 'No' sinon. Nous verrons plus tard dans l'analyse descriptive si cette information est pertinente ou non.

Âge des animaux

Certains animaux ont un âge négatif. Étant donné qu'ils sont très peu nombreux, on décide de les écarter, ces erreurs provenant probablement d'erreurs de saisie dans la base de données.

Distribution des âges des animaux

Les distributions des âges des animaux étant très proches à l'entrée et à la sortie du refuge, on peut déjà faire l'hypothèse que la majorité des séjours sont de courte durée. Néanmoins, nous aurons largement l'occasion de le vérifier plus tard.

Par ailleurs, la forme de la distribution des âges des animaux fait penser à une loi puissance. On sait que beaucoup de modèles prédictifs font des hypothèse par exemple de normalité sur les distributions des variables quantitatives. On transforme alors les variables d'âges à l'aide de la fonction $x \mapsto \log(1+x)$ de telle sorte à obtenir une distribution des âges plus proche du cas gaussien. Évidemment le résultat est loin d'être satisfaisant avec cette transformation simple, mais néanmoins empiriquement les performances des prédictions sont améliorées grâce à ce genre de transformation. Elles permettent également d'y voir plus clair, ce qui n'est pas dommage.

Durées de séjour

Maintenant que l'on s'est assuré d'avoir pour chacune de nos observations une date d'entrée au refuge ainsi qu'une date de sortie, on peut notamment déterminer la durée totale du séjour, que l'on pourra par la suite analyser plus en détail, voire chercher à prédire selon le type d'animal.

Distribution des durées de séjour

Donnons un aperçu de la distribution des durées de séjour des animaux au refuge.

Il sera sans doute nécessaire là encore de passer à l'échelle logarithmique afin d'y voir plus clair.

On voit que la distribution du logarithme des durées de séjour est assez complexe et multimodale. On imagine que certains animaux restent généralement moins longtemps que d'autres au refuge, par exemple selon le type d'animal ou encore son état de santé à son arrivée au refuge, et que cela explique en partie cette distribution. Nous aurons l'occasion de le vérifier dans l'analyse descriptive. Pour faciliter les prochains traitements et améliorer la qualité des modèles de prédictions que nous avons prévu d'implémenter plus tard, nous décidons d'ajouter une variable correspondant au logarithme de la durée de séjour en secondes, que l'on nomme logDuration.

Les séjours les plus courts

Voyons un aperçu des séjours les plus courts au refuge.

Animal ID Animal Type Breed Name Intake Type Intake Sex Intake Condition Intake DateTime Outcome DateTime Outcome Type Outcome Subtype Duration
A822184 Dog Siberian Husky Mix Unknown Stray Intact Female Pregnant 2020-08-28 19:50:00 2020-08-28 19:51:00 Transfer Partner 0 days 00:01:00
A493291 Dog Staffordshire Mix Tex Stray Neutered Male Normal 2013-10-27 22:42:00 2013-10-27 22:43:00 Return to Owner NaN 0 days 00:01:00
A770362 Cat Domestic Shorthair Mix Unknown Stray Unknown Normal 2018-04-18 18:06:00 2018-04-18 18:07:00 Transfer Partner 0 days 00:01:00
A769942 Cat Domestic Shorthair Mix Unknown Stray Unknown Normal 2018-04-12 18:59:00 2018-04-12 19:00:00 Transfer Partner 0 days 00:01:00
A769939 Cat Domestic Shorthair Mix Unknown Stray Unknown Normal 2018-04-12 18:59:00 2018-04-12 19:00:00 Transfer Partner 0 days 00:01:00

Les séjours les plus longs

Et des séjours les plus longs.

Animal ID Animal Type Breed Name Intake Type Intake Sex Intake Condition Intake DateTime Outcome DateTime Outcome Type Outcome Subtype Duration
A737705 Dog Labrador Retriever Mix Heddy Stray Intact Female Normal 2016-11-02 20:15:00 2020-07-16 16:35:00 Transfer Partner 1351 days 20:20:00
A707965 Cat Domestic Shorthair Mix Irene Stray Intact Female Normal 2015-07-20 17:12:00 2019-05-28 09:45:00 Adoption Foster 1407 days 16:33:00
A702369 Cat Domestic Shorthair Mix Pigeon Owner Surrender Spayed Female Normal 2015-05-12 16:45:00 2019-05-21 09:54:00 Adoption Foster 1469 days 17:09:00
A722987 Dog Pit Bull Snow Owner Surrender Intact Female Normal 2016-03-24 16:59:00 2020-05-24 16:30:00 Adoption NaN 1521 days 23:31:00
A642712 Dog Pit Bull Mix Patches Stray Spayed Female Injured 2016-01-05 11:37:00 2021-04-01 10:08:00 Adoption Foster 1912 days 22:31:00

Prétraitement de la variable de race

La variable de race, Breed, qui est une variable qualitative, comprend un grand nombre de modalités. De plus, certaines races de chien par exemple sont présentes d'une certaine façon en double dans l'ensemble de données, par exemple sous les formes Pit Bull et Pit Bull Mix, ou encore Golden Retriever et Golden Retriever Mix.

Breed
Domestic Shorthair Mix 31699
Domestic Shorthair 10137
Pit Bull Mix 8774
Labrador Retriever Mix 7260
Chihuahua Shorthair Mix 6428

Ensuite, un très grand nombre de races de chiens sont des croisements de la forme Race1/Race2. Dans le but d'effectuer une première simplification de nos données, nous avons décidé de regrouper les races se terminant par Mix avec la race principale, et d'englober tous les croisement dans une race unique Mix. Le nombre de races à l'issu de ce traitement reste grand, certaines races de chien n'ayant par exemple été vues qu'une fois au refuge dans la période de notre jeu de données. Néanmoins, ce premier traitement permet de consolider les races majoritaires, sur lesquels nous devrons sans doute nous concentrer lorsqu'il s'agira de faire de la prédiction.

Breed
Domestic Shorthair 41836
Mix 12598
Pit Bull 10551
Labrador Retriever 8527
Chihuahua Shorthair 7723

Prétraitement de la variable sexe

Observons la façon dont est encodé l'information concernant le sexe des animaux accueillis au refuge.

Intake Sex Outcome Sex
Intact Male 44238 17105
Intact Female 42030 16594
Neutered Male 20367 47500
Spayed Female 17339 42775
Unknown 10621 10621

On voit que les variables d'origine contiennent en réalité deux informations à la fois : le sexe ainsi que le fait que l'animal soit stérilisé ou non. On décide alors de scinder cette information en une colonne pour le sexe qui restera inchangé au cours du séjour de l'animal, puis deux colonnes décrivant la stérilisation à l'arrivée puis au départ des animaux. On remarque d'ailleurs que de très nombreux animaux se font stériliser au cours de leur séjour au refuge, ce qui est certainement une politique globale des refuges animaliers pour éviter la surpopulation.

Analyse descriptive des données

Dans cette section, nous faisons une analyse descriptive exploratoire des données. Ainsi, nous allons nous pencher sur les différents espèces d'animaux accueillis au refuge, à leur âge, à leur caractéristiques à l'entrée, à la durée de leur séjour, et au destin qui leur est réservé. L'idée de cette exploration est d'apprendre à connaître plus en profondeur les données dont on dispose, et éventuellement à formuler des hypothèses que nous pourrons ensuite tenter de vérifier statistiquement. Cette analyse exploratoire sert aussi à guider les choix en termes de données ou d'approches que nous ferons concernant notre objectif final qui est de prédire le sort d'un nouvel animal à son entrée au refuge.

Analyse des types d'animaux accueillis au refuge

Commençons par nous intéresser à la fréquence des différents types d'animaux accueillis au refuge. On la représente à l'aide d'un diagramme en barres.

On se rend compte tout d'abord que les classes sont très déséquilibrées, et que les chiens et les chats représente la grande majorité des animaux accueillis au refuge. Il est probable que nous décidions d'écarter au moins les oiseaux ainsi que le bétail pour la partie prédiction. En effet, ces classes étant sous-représentées, nous manquerions d'observations pour entraîner des modèles de prédictions. Par ailleurs, la nature des données rend difficile l'implémentation de méthodes de sur-échantillonage, plus adaptées en général aux données quantitatives. Ici, la majorité des variables d'entrées sont qualitatives.

On poursuit en représentant pour chacun de ces types d'animaux la fréquence des différentes espèces qui les composent.

On remarque que pour chacun des types d'animaux, les espèces qui les composent sont également présentes dans les données en quantités très inégales. En général, une espèce domine et nous avons calculé que par exemple pour la catégorie Other, les chauve-souris représentaient environ la moitié des animaux. Les chiens font exception à cette règle, les premières espèces étant présentes en quantités similaires. Cependant, on rappelle que l'espèce Mix correspond en réalité à tous les croisements présents initialement dans le jeu de données, et donc qu'elle contient une grande diversité d'espèces de chiens différentes.

Analyse de l'âge des animaux

Nous avons déjà vu dans la partie Prétraitement que la grande majorité des animaux accueillis au refuge était jeunes. On cherche maintenant à creuser plus profondément le lien entre l'âge des animaux et les autres variables du jeu de données. On commence par s'intéresser à la distribution de l'âge conditionnellement au type d'animal, puis au type d'animal couplé au sort qui lui est réservé, c'est-à-dire au type de sortie du refuge.

Note : Les violons peuvent donner l'impression que certains animaux auraient un âge négatif à leur sortie du refuge. Cela n'est pas le cas car nous avons écarté les âges négatifs considérés comme des erreurs de saisie dès le début de ce calepin. Il s'agit en réalité d'un artefact de l'estimation de la densité à noyaux qui est effectuée ici. Ce problème est par exemple documenté dans ce post sur stackoverflow. Il ne semble pas y avoir de moyen évident pour corriger ce problème.

Nous pouvons remarquer que pour chacun des trois types d'animaux majoritaires, la majorité des individus sont jeunes. Pour les chats spécifiquement, la moyenne d'âge semble être bien inférieure, avec un premier mode de la distribution à quelques semaines tout au plus. Les chiens quant à eux, bien que majoritairement âgés de moins de deux ans à leur sortie du refuge, ont une distribution plus aplatie que les autres espèces animales. Enfin, comme nous l'avions vu précédemment, l'animal étant resté le plus longtemps au refuge est un chien, en l'occurrence une croisée Pit Bull nommée Patches, chienne errante étant arrivée blessée au refuge le 5 janvier 2016 à l'âge de 6 ans, et ayant finalement été adoptée le 1 avril 2021 à l'âge de 11 ans après 5 ans et 3 mois passés au refuge.

Animal Type Breed Color Date of Birth Name Intake Type Intake Condition Intake DateTime Outcome Type Outcome Subtype Outcome DateTime Duration
Dog Pit Bull White/Gray Tiger 2009-11-28 Patches Stray Injured 2016-01-05 11:37:00 Adoption Foster 2021-04-01 10:08:00 1912 days 22:31:00

Nous constatons visuellement que les chiens adoptés sont dans l'ensemble plus jeunes que les chiens euthanasiés et rendus à leurs propriétaires. Nous pourrons réaliser par la suite une analyse de la variance à 1 facteur pour comparer les moyennes d'âge dans ces 3 catégories de sortie de refuge et déterminer si celles ci sont bien significativement différentes. Enfin, il est frappant sur cette visualisation que les distributions des âges des animaux qui se font adoptés ou alors qui sont transférés (à priori dans un autre refuge) sont très proches. On voit également qu'en terme d'issues favorables, les chiens et les chats âgés de plus de 5 ans à leur entrée au refuge (soit 260 semaines) ou de meilleures chances d'être retournés à leur propriétaire que d'être adoptés.

Analyse des entrées au refuge

Là encore on remarque que les types d'entrée au refuge sont très déséquilibrées. De plus, les catégories Abandoned et Euthanasia Request étant extrêmement rares, on décide de les écarter dans la suite de notre analyse.

Analyse des sorties du refuge

Le graphique précédent justifie le fait que nous nous intéresserons plus tard seulement aux quatre types de sortie majoritaire, à savoir l'adoption, le transfert, le retour au propriétaire et l'euthanasie. On décide également d'inclure les sorties de type Rto-Adopt dans les Return to Owner, puisqu'il semble d'après le site de la ville d'Austin que les deux soient équivalents.

Analyse des durées de séjour

L'objectif dans cette section sera de mieux comprendre ce qui peut influencer la durée de séjour d'un animal au refuge. On peut commencer par comparer les durées de séjour au refuge selon le type d'animal. Comme précédemment, la durée de séjour étant une variable qualitative, nous allons représenter les distributions pour cette variable selon le type d'animal ainsi que selon le type d'entrée et le type de sortie à l'aide de diagramme en violons. On choisit de se concentrer sur les animaux dont les types d'entrée et de sortie sont majoritaires, c'est-à-dire pour chacun les 4 types les plus fréquents : Stray, Owner Surrender, Public Assist et Wildlife pour les entrées, Adoption, </code>Transfer</code>, Return to Owner, Euthanasia pour les sorties.

Les distributions des durées de séjours sont compliquées et multimodales pour les trois types principaux d'animaux. De plus, les moyennes de durées de séjours entre les chats et les chiens semblent très proches. Une analyse de la variance permettra de vérifier si elles sont significativement différentes. Les durées de séjours pour les autres types d'animaux sont clairement plus faibles. Cela n'est pas surprenant, maintenant que nous savons que la moitié d'entre eux sont des chauve-souris, que le refuge ne conserve probablement pas longtemps. On peut d'ailleurs s'intéresser plus en détail à ces distributions en conditionnant par le type d'entrée et le type de sortie du réfuge.

Cette visualisation nous permet de voir que le type d'entrée au refuge a un impact important sur la distribution des durées de séjour. En effet, bien que les durées de séjour moyennes selon le type d'entrée soient proches en ce qui concerne par exemple les chiens et les chats, l'aspect des distributions varie beaucoup. Pour les chats par exemple, on remarque que la première partie de la distribution concernant à des logarithmes de durées de séjours entre $8$ et $10$ correspond principalement à des entrées de chats errants. On pourrait multiplier ce genre de remarque, mais on se contentera de noter que le type d'entrée sera certainement important pour prédire la durée de séjour.

Enfin, cette visualisation des temps de séjour selon le type de sortie nous conforte dans l'idée que prédire à la fois le sort réservé à un animal entrant au refuge (c'est-à-dire son type de sortie) et sa durée de séjour est une problématique intéressante pour la prédiction. En effet, on voit bien ici que selon le type de sortie, les durées de séjour sont très différentes. Les animaux se faisant adopter restent par exemple en moyenne bien plus longtemps au refuge que les animaux dont le destin est différent. Ainsi, lorsqu'il s'agira de prédire le sort d'un animal, il est très problable que prédire indépendemment le type de sortie et la durée de séjour amèneraient à des résultats moins bons que de prédire les deux à la fois. Autrement dit, nous tenterons d'estimer la loi jointe du couple type de sortie et durée de séjour en faisant l'hypothèse que ces deux variables ne sont bien sûr pas indépendantes.

Analyse chronologique des données

Nous n'avons pas encore abordé l'aspect temporel de nos données. Or il est bien connu que les refuges animaliers ont une activité accrue en été. En France, par exemple, d'après le site de la fondation 30 millions d'amis, $100\,000$ animaux de compagnie sont abandonnés tous les ans, dont $60\,000$ en été. Bien entendu, nos données ne concernent pas seulement les animaux de compagnie, ni même les abandons exclusivement. Nous avons vu que parmi les types d'entrées au refuge, la grande majorité ($68.9\,\%$) des animaux étaient errants, dont vraisemblablement une partie correspond à des animaux abandonnés, mais pas l'intégralité non plus.

Cela étant dit, il sera intéressant de voir si l'on observe effectivement un pic en été dans les entrées au refuge, et également de voir si la proportion des animaux recueillis, leur condition, ainsi que le type de sortie associés sont stables sur la période ou s'ils évoluent, par exemple d'année en année ou en fonction des saisons.

On retrouve bien la saisonnalité que nous avions mentionnée précédemment, c'est-à-dire que tous les ans on observe bien un pic dans le nombre d'entrées au refuge à la période estivale. On remarque également une chute importante du nombre d'entrée au refuge pendant l'année 2020, marquée par la pandémie de COVID-19.

En affichant l'évolution du nombre d'entrée selon le type d'entrée, on se rend compte que la périodicité identifiée précédemment n'est valable que pour le type d'entrée correspondant aux animaux errants. Concernant les dépôts au refuge par les propriétaires, les dépôts publics et le nombre d'animaux sauvages, on n'observe pas de saisonnalité particulière. De la même façon, on note que le nombre d'entrées d'animaux sauvage est restée inchangée pendant la période pandémique, contrairement aux nombre d'entrées dues aux animaux errants ou au dépôt par les propriétaires.

Malgré l'intérêt de ces observations pour la gestion du refuge, si l'on se place dans le cadre de la prédiction de la durée de séjour d'un animal accueilli au refuge ainsi qu'au destin qui lui est réservé, on ne peut pas encore dire si la connaissance de la période d'entrée au refuge sera pertinente. On se propose donc d'analyser les durées de séjour et les types de sortie du refuge selon les années et les saisons. Si l'on observe un lien entre ces variables et les variables à prédire, alors nous les prendrons en compte dans la section suivante lorsqu'il s'agira d'entraîner des modèles de prédiction.

Durées de séjour et type de sortie selon l'année d'entrée

Les distributions des durées de séjour, bien que similaires d'année en année, semblent indiquer que les durées de séjour ont tendance à s'allonger au fil du temps. Sans tirer de conclusion trop hâtive, cela nous laisse penser que l'information de l'année d'entrée au refuge pourrait être une variable pertinente lors de l'élaboration de modèles de prédiction.

Contrairement à ce que l'on pouvait supposer, les proportions des différents types de sortie du refuge ont évoluées sur la période étudiée. En effet, les adoptions représentent une partie de plus en plus importante des sorties. Alors qu'elles représentent moins de $40\,\%$ des sorties pour les animaux entrées au refuge en 2014, elles ont représentent plus de $55\,\%$ des sorties pour les animaux entrées au refuge en 2021. La proportion des retours au propriétaires ne semblent pas varier énormément sur la période, même si on note qu'ils représent une proportion plus faible que d'habitude pour les entrées au refuge en 2021. Cela nous conforte dans l'idée que la données de l'année d'entrée au refuge permettra probablement d'améliorer les performances de prédiction dans la section suivante.

Durées de séjour et type de sortie selon la saison d'entrée

Pour conclure cette partie, on se propose de réitérer l'analyse précédente sur les années d'entrée au refuge en considérant cette fois-ci la saison de l'année où l'animal est entré au refuge.

Bien que la variabilité des durées de séjour pour les entrées au refuge au printemps, les distributions semblent très proches. On pourrait le vérifier avec un test d'analyse de la variance, mais avant cela on note qu'il est peu probable que la variable de saison d'entrée au refuge soit importante pour la prédiction de la durée de séjour. Voyons maintenant le lien entre saison d'entrée et type de sortie du refuge.

Là encore, contrairement à l'analyse précédente sur les années, il ne semble pas y avoir de lien évident entre saison d'entrée et type de sortie du refuge. On note toutefois que la proportion des retours aux propriétaires semble plus importante en hiver. La variable de saison pourrait être pertinente pour aider à prédire non pas la durée de séjour au refuge, mais le type de sortie.

Tests d'hypothèses

Dans cette section nous allons étudier la pertinence des variables pour expliquer nos deux variables d'intérêt grâce à des tests d'hypothèses. Nous espérons alors prouver :

  • la dépendance de certaines variables qualitatives avec la variable Outcome Type à l'aide de tests du chi-deux
  • le lien entre l'Outcome Type et nos différentes variables quantitatives à l'aide du test H de Kruskal-Wallis qui est l'équivalent non paramétrique du test de l'ANOVA
  • le lien entre notre première variable d'intérêt Outcome Type et notre seconde variable d'intérêt logDuration à l'aide du test H de Kruskal-Wallis
  • le lien entre les variables quantitatives et la variable logDuration à l'aide d'un test sur les coefficients de corrélation linéaire de Pearson.

Dépendance des variables qualitatives avec la variable Outcome Type

Commençons par les tests du chi-deux. Le tableau suivant résume les tests du chi-deux réalisés pour chaque variable qualitative, à chaque fois avec la variable Outcome Type. Il apparait grâce à ces tests une dépendance entre nos variables qualitatives et notre variable d'intérêt, les p-valeurs étant toutes nettement inférieures au seuil classique de 5%.

Variable Statistique X² Degrés de liberté p-valeur
Animal Type 64829.288461 6 0.000000e+00
Sex 41880.356943 6 0.000000e+00
Named 32242.794714 3 0.000000e+00
Intake Type 84929.321467 9 0.000000e+00
Intake Condition 19777.965961 36 0.000000e+00
Intake Sterilized 51918.154819 6 0.000000e+00
Intake Season 1183.655387 9 4.093637e-249

Test H de Kruskal-Wallis

Il s'agit maintenant de réaliser des tests H de Kruskal-Wallis qui permettent de tester l'égalité des médianes d'une variable quantitative divisée en sous échantillons.

Le tableau suivant résume les tests H de Kruskal-Wallis réalisés pour chaque couple de sous échantillons possibles de créer avec la variable Outcome Type pour la variable Intake logAge. Ce dernier nous permet de dire que les distributions de la Intake logAge liées à chaque modalité de la variable Outcome Type sont différentes deux à deux.

Echantillons étudiés Statistique H p-valeur
(Adoption, Euthanasia) 1171.434946 9.847918e-257
(Adoption, Return to Owner) 15288.512212 0.000000e+00
(Adoption, Transfer) 364.488799 2.966043e-81
(Euthanasia, Return to Owner) 2784.751627 0.000000e+00
(Euthanasia, Transfer) 1476.348354 0.000000e+00
(Return to Owner, Transfer) 13495.611747 0.000000e+00

De la même façon le tableau suivant résume les tests H de Kruskal-Wallis réalisés pour chaque couple de sous échantillons possibles de créer avec la variable Outcome Type pour la variable Intake Year. Encore une fois les p-valeur nous indiquent que les distributions de la variable Intake Year liées à chaque modalité de la variable Outcome Type sont différentes deux à deux, à l'exception du couple de distributions Return to Owner et Transfer pour lequel la p-valeur associée au test est d'environ 0.7.

Echantillons étudiés Statistique H p-valeur
(Adoption, Euthanasia) 804.372916 6.043850e-177
(Adoption, Return to Owner) 582.734184 9.535476e-129
(Adoption, Transfer) 738.480405 1.282927e-162
(Euthanasia, Return to Owner) 166.425869 4.465191e-38
(Euthanasia, Transfer) 172.547531 2.054868e-39
(Return to Owner, Transfer) 0.138734 7.095429e-01

Enfin, le tableau ci dessous résume le résultat des tests H de Kruskal-Wallis effectués entre les variables qualitatives retenues pour la suite et la logduration. Encore une fois ces tests d'hypothèses nous confortent dans notre choix de variables qui apparait comme pertinant pour la prédiction de la logDuration et de l'Outcome Type.

Variable étudiée Statistique H p-valeur
Animal Type 7768.127427 0.000000e+00
Sex 14962.461305 0.000000e+00
Named 18266.434258 0.000000e+00
Intake Type 9809.996262 0.000000e+00
Intake Sterilized 15870.641834 0.000000e+00
Intake Season 352.719624 3.844038e-76

Coefficient de corrélation linéaire de Pearson

Wall time: 70 ms
Variable Coefficient de corrélation p-valeur
Intake logAge 0.035635 3.978742e-38
Intake Year 0.088112 2.669647e-224

Nous obtenons des coefficients de corrélation très faibles bien que significativement différents de 0. Cela s'explique par le fait que nous n'avons pas calculé ces coefficients conditionnellement aux modalités de nos autres variables.

Dans l'ensemble ces tests d'hypothèses permettent de confirmer la pertinence des variables qui nous serviront de prédicteurs pour la suite de notre étude.

Modèles de prédiction

Constitution des ensembles de données

On remarque que parmi les animaux de la catégorie Other, il y a une forte correspondance entre les animaux entrés au refuge en tant que Wildlife et les animaux se faisant principalement euthanasier. On propose donc de recoder les animaux de cette catégorie de façon binaire, en distinguant les espèces pouvant être considérés comme animaux domestiques potentiels, et les autres.

Nous avons déjà remarqué que les différents types d'animaux ainsi que les races qui les composent étaient présents en quantités très inégales dans nos données. Pour tenter de limiter ce problème, nous allons tenter de construire un sous-ensemble de données qui contiendrait des classes en proportions un peu plus équilibrées, notamment en écartant les classes rares. Ainsi, on se limite déjà aux 3 types d'animaux principaux : Dog, Cat et Other ; aux 4 types d'entrées au refuges principaux : Stray, Owner Surrender, Public Assist et Wildlife ; aux 4 types de sorties principaux : Adoption, Transfer, Return to Owner, Euthanasia.

Ensuite, concernant les races d'animaux, nous avons également remarqué que celles-ci étaient très déséquilibrées. Ainsi, nous allons nous limiter à un sous-ensemble des races de chiens, en l'occurrence les 4 races les plus représentées (à l'exception de la race composée de tous les croisements Mix) : Pit Bull, Labrador Retriever, Chihuaha Shorthair, German Shepherd. Concernant les chats, nous avons noté qu'ils étaient dominé par la race principale Domestic Shorthair. Cependant, nous allons essayer de distinguer selon la couleur des chats, dont on fait l'hypothèse que celle-ci pourrait avoir un impact sur le sort réservé à l'animal.

On commence par noter que les couleurs des chats de notre jeu de données sont assez variées, et qu'elles peuvent potentiellement être un moyen de créer des sous-catégories dont les proportions seraient similaires aux différentes races pour les chiens. Pour rééquilibrer légèrement les types d'animaux de notre jeu de données, on décide de se focaliser sur les 5 couleurs les plus fréquentes.

Le graphique précédent nous montre que cette catégorisation des chats selon leur couleur peut potentiellement aider à mieux prédire le type de sortie. Il est évident que les proportions de retours aux propriétaires sont par exemple plus élevées pour les chats noirs Black ou noir et blanc Black/White que pour les autres.

Zoom sur la catégorie 'Other'

On s'intéresse à la possibilité d'opérer un regroupement de certaines espèces de la catégorie Other. On s'intéresse alors à la proportion, pour les principales espèces concernées, des différents types d'entrée et de sortie du refuge. On représente les résultats sous la forme graphique en suivant.

Aperçu des données de prédiction

Animal Type Animal Subtype Sex Named Intake Type Intake logAge Intake Condition Intake Sterilized Intake Season Intake Year logDuration Outcome Type
Dog Pit Bull Female Yes Stray 7.001246 Injured No Autumn 2013 10.085809 Euthanasia
Cat Black/White Unknown No Stray 4.812184 Normal Unknown Autumn 2013 10.167389 Euthanasia
Dog Black/White Male No Stray 7.980366 Injured No Autumn 2013 10.332669 Euthanasia
Cat Brown Tabby/White Male Yes Owner Surrender 8.733916 Normal Yes Autumn 2013 13.574559 Transfer
Dog Black Female Yes Stray 7.287561 Normal No Autumn 2013 14.506756 Adoption

Méthodologie pour la prédiction

Stratégie de stratification

Dans le but d'entraîner un modèle de prédiction puis de le confronter à un ensemble de test qui seront suffisamment similaires en terme des animaux qui les composent, des types d'entrée au refuge, ainsi que des types de sortie du refuge, nous allons procéder à un découpage apprentissage/test stratifié qui prendra en compte ces différentes catégories.

Notre méthode consiste tout d'abord à construire une variable qualitative temporaire construire en concaténant les valeurs des trois variables Animal Type, Intake Type et Outcome Type. ensuite, nous utilisons la méthode de stratification implémentés dans la fonction train_test_split de scikit-learn.

Voyons un aperçu de cette variable qualitative de stratification.

Variable de stratification
Dog_Stray_Euthanasia
Cat_Stray_Euthanasia
Dog_Stray_Euthanasia
Cat_Owner Surrender_Transfer
Dog_Stray_Adoption

L'intérêt est alors que ces catégories seront présentes en proportions identiques dans notre ensemble d'entraînement et dans notre ensemble de test.

Construction des ensembles d'apprentissage et de test

Notre ensemble de données dédié à la construction d'un modèle de prédiction contient environ $62\,500$ observations. On le découpe en une base d'apprentissage et une base de test selon la stratégie de stratification décrite précédemment. Notre ensemble de test contiendra $10\,000$ observations.

Évaluation des modèles

Rappellons que le sujet qui nous intéresse ici est de prédire deux choses à la fois. À l'arrivée d'un animal au refuge, on veut être capable de prédire le sort qui lui est réservé, ce que l'on a appelé son type de sortie, et la durée de son séjour au refuge.

Concernant l'évaluation des modèles, il est nécessaire de choisir des métriques qui permettront d'évaluer leur performance. Dans notre cas, nous aurons besoin d'une première métrique permettant de juger de la qualité de la classification multi-classe opérée pour déterminer le destin de l'animal, puis d'une seconde pour juger de la qualité de la prédiction de sa durée de séjour. On peut se baser pour rester simple sur un calcul de taux d'erreur pondéré par l'inverse de la prévalence de chaque classe dans la réponse, ce qui permet de donner la même importante aux taux d'erreurs des classes déséquilibrées dans le cas de la classification, puis sur une minimisation de l'erreur quadratique dans le cas de la régression.

Stratégies d'entraînement

Puisque l'on cherche ici à estimer la loi jointe du couple de variables aléatoires de la durée de séjour et du destin réservé à l'animal, il est en théorie équivalent : d'estimer tout d'abord la loi marginale du type de sortie puis la loi conditionnelle de la durée de séjour sachant le type de sortie ; d'estimer tout d'abord la loi marginale de la durée de séjour puis la loi conditionnelle du type de sortie conditionnellement à la durée de séjour ; d'estimer directement la loi du couple à l'aide d'une méthode d'apprentissage qui accepte une variable réponse bivariée.

Question 1 - Équivalence des conditionnements

En pratique, la majorité des méthodes d'apprentissage statistiques sont adaptées à des variables réponse unidimensionnelles. Notre objectif sera donc ici de comparer les deux approches se reposant sur l'estimation du couple à travers les lois marginale et conditionnelle, pour vérifier si en pratique les résultats obtenus sont proches. Nous ne nous intéresserons pas dans ce travail à l'estimation directe du couple type de sortie et durée de séjour.

Nous allons comparer deux méthodes : (1) procéder dans un premier temps à une étape de classification, puis entraîner un modèle de régression qui prend en compte la classe prédite ; (2) procéder dans un premier temps à une étape de régression, puis entraîner un modèle de classification qui prend en compte la durée de séjour prédite. En principe les résultats obtenus devraient être très proches, et c'est ce que nous voulons investiguer. Par ailleurs, il sera intéressant de voir si les modèles ainsi construits sont plus performants sur la première étape ou sur la seconde, c'est-à-dire par exemple si le fait d'implémenter une étape de pré-classification avant la régression donne lieu à un écart quadratique moyen inférieur ou supérieur à l'écart quadratique moyen obtenu en commençant par la régression, etc.

Puisque cette année nous avons peu de temps pour explorer l'ensemble des méthodes disponibles pour faire ce travail, nous allons essayer de rester simple en utilisant des méthodes classiques et déjà implémentées dans scikit-learn, telle que la régression logistique multinomiale pour la classification ainsi que des approches basées sur des forêts aléatoires.

Question 2 - Stratégies d'entraînement pour l'estimation d'une loi conditionnelle

En parallèle de cette question de quel ordre de variable considérer pour le conditionnement permet d'obtenir les meilleures prédictions, nous allons comparer deux stratégies d'entraînement pour l'estimation d'une loi conditionnelle. D'un point de vue méthodologique, nous considérons trois approches différentes pour l'estimation d'une telle loi. Appelons la première : l'approche d'oracle ; et la seconde : l'approche aveugle. Enfin, nous proposons une procédure paramétrique permettant de trouver le meilleur compromis entre ces deux approches.

Estimation d'une loi conditionnelle : Approche d'oracle

L'approche d'oracle consiste à entraîner les deux modèles sur l'intégralité de l'ensemble d'apprentissage, en estimant la première loi sur les observations seules, et la loi conditionnelle sur les observations couplées aux vraies valeurs de la loi selon laquelle on conditionne. Autrement dit dans le cas où l'on procèderait à la classification en premier, cette approche consiste à entraîner le modèle de classification sur l'intégralité de l'ensemble d'apprentissage, puis d'entraîner le modèle de régression sur les même données en ajoutant les vrais classes des observations. De cette façon, on peut s'attendre à ce que le modèle de régression soit très performant sur les estimations bien classifiées puisqu'il aura seulement été soumis à l'entraînement à des observations pour lesquelles la classe était la vraie classe à prédire.

Estimation d'une loi conditionnelle : Approche aveugle

L'approche aveugle consiste à découper l'ensemble d'apprentissage en deux ensembles : un premier ensemble servant de base d'apprentissage pour la loi marginale, et un second ensemble servant de base d'apprentissage pour la loi conditionnelle. Pour rester simple, on scindera notre ensemble d'apprentissage en deux sous-ensembles de taille égale pour chacune des deux tâches. L'approche aveugle consiste alors dans un premier temps à estimer la loi marginale sur le sous-ensemble d'apprentissage dédié, puis d'effectuer des prédictions pour le deuxième sous-ensemble dédié à l'estimation de la loi conditionnelle. On estime ensuite la loi conditionnelle sur le deuxième sous-ensemble de données auquel on a ajouté les prédictions effectuées précédemment. L'intérêt est alors qu'une partie des prédictions effectuées par le premier modèle vont être erronées, ce qui conduira à l'entraînement d'un modèle plus robuste.

Estimation d'une loi conditionnelle : Approche paramétrique

Nous n'avons pas eu le temps de faire des recherches bibliographiques sur les méthodes d'estimation de variables réponses multivariées, et nous ignorons si les approches décrites précédemment sont portent déjà un nom, ou si leurs performances ont été évaluées, etc.

Cela étant dit, nous avons imaginé pour aller plus loin une approche qui consisterait à optimiser un paramètre réel inclu dans $[0,1]$ qui correspondrait à la proportions des « vraies valeurs » à injecter parmi les observations de la variable de conditionnement. Il y a certainement un compromis à faire entre le conditionnement par les vrais valeurs de la réponse par laquelle on conditionne, qui permet d'estimer une loi conditionnelle plus performante, et le conditionnement par les valeurs éventuellement erronées issues de l'estimation de la première loi marginale, qui permet d'entraîner un modèle de régression au meilleur pouvoir de généralisation.

Résumons la procédure :

Pour un ensemble de paramètres $\alpha = (\alpha_1, \dots, \alpha_p) = \{\frac{k}{p}\,|\,k \in \{0, \dots, p\}\}$ :

  1. On scinde l'ensemble d'apprentissage en deux sous-ensemble : l'un dédié à l'estimation de la loi marginale, l'autre dédié à l'estimation de la loi conditionnelle,
  2. On estime la loi marginale sur le premier ensemble de données, puis on effectue des prédictions sur le second ensemble de données dédié à l'estimation de la loi conditionnelle,
  3. Pour chacune des prédictions effectuées par le modèle marginal, on la remplace avec probabilité $\alpha_k$ par la vraie valeur de la première composante de la variable réponse bivariée,
  4. On estime la loi conditionnelle sur le deuxième sous-ensemble dédié auquel on ajoute les prédictions ainsi modifiées,
  5. On prédit normalement pour l'ensemble de validation, c'est-à-dire que l'on prédit tout d'abord la première composante de la réponse bivariée à l'aide du modèle marginal, puis on utilise cette prédiction ajoutée aux observations pour prédire la deuxième composante de la réponse à l'aide du modèle conditionnel

Le paramètre $\alpha$ n'ayant aucune influence sur l'estimation de la loi marginale, on sélectionne finalement le paramètre $\alpha_k$ qui minimise l'erreur de validation de la loi conditionnelle, par exemple l'erreur quadratique dans le cas de la régression et le paramètre $\alpha_k$ qui maximise le taux de bonnes classifications pondéré par l'inverse de la prévalence des classes dans le cas de la classification.

Classification

Concernant la classification, nous allons nous intéresser à trois modèles. Le premier est un modèle de régression logistique multinomiale, le deuxième un modèle de forêt aléatoire de classification, et le dernier un modèle de vote doux basé sur les deux modèles précédents. Le vote doux consiste à prédire l'argmax des sommes des probabilités estimées par les modèles qui le composent. On peut considérer que l'on prédit ainsi la classe dans laquelle les modèles ont le plus confiance.

Pipeline(steps=[('columntransformer',
                 ColumnTransformer(transformers=[('standard-scaler',
                                                  StandardScaler(),
                                                  ['Intake logAge',
                                                   'Intake Year']),
                                                 ('one-hot-encoder',
                                                  OneHotEncoder(handle_unknown='ignore'),
                                                  ['Animal Subtype', 'Sex',
                                                   'Named', 'Intake Type',
                                                   'Intake Condition',
                                                   'Intake Sterilized',
                                                   'Intake Season'])])),
                ('logisticregression',
                 LogisticRegression(class_weight='balanced', max_iter=1000,
                                    random_state=0))])
Please rerun this cell to show the HTML repr or trust the notebook.
Pipeline(steps=[('columntransformer',
                 ColumnTransformer(transformers=[('numerical-passthrough',
                                                  'passthrough',
                                                  ['Intake logAge',
                                                   'Intake Year']),
                                                 ('ordinal-encoder',
                                                  OrdinalEncoder(handle_unknown='use_encoded_value',
                                                                 unknown_value=-1),
                                                  ['Animal Subtype', 'Sex',
                                                   'Named', 'Intake Type',
                                                   'Intake Condition',
                                                   'Intake Sterilized',
                                                   'Intake Season'])])),
                ('randomforestclassifier',
                 RandomForestClassifier(class_weight='balanced',
                                        max_features=0.8, random_state=0))])
Please rerun this cell to show the HTML repr or trust the notebook.

Voici les matrices de confusions obtenues par ces trois modèles sur nos données d'apprentissage.

Taux de bonne classification pondéré par régression linéaire multinomiale : 68.54 %
Taux de bonne classification pondéré par forêt aléatoire de classification : 67.13 %
Taux de bonne classification pondéré par classfieur par vote doux : 70.49 %
VotingClassifier(estimators=[('lr',
                              Pipeline(steps=[('columntransformer',
                                               ColumnTransformer(transformers=[('standard-scaler',
                                                                                StandardScaler(),
                                                                                ['Intake '
                                                                                 'logAge',
                                                                                 'Intake '
                                                                                 'Year']),
                                                                               ('one-hot-encoder',
                                                                                OneHotEncoder(handle_unknown='ignore'),
                                                                                ['Animal '
                                                                                 'Subtype',
                                                                                 'Sex',
                                                                                 'Named',
                                                                                 'Intake '
                                                                                 'Type',
                                                                                 'Intake '
                                                                                 'Condition',
                                                                                 'Intake '
                                                                                 'Sterilized',
                                                                                 'Intake '
                                                                                 'Season'])])),
                                              ('logi...
                                                                                ['Intake '
                                                                                 'logAge',
                                                                                 'Intake '
                                                                                 'Year']),
                                                                               ('ordinal-encoder',
                                                                                OrdinalEncoder(handle_unknown='use_encoded_value',
                                                                                               unknown_value=-1),
                                                                                ['Animal '
                                                                                 'Subtype',
                                                                                 'Sex',
                                                                                 'Named',
                                                                                 'Intake '
                                                                                 'Type',
                                                                                 'Intake '
                                                                                 'Condition',
                                                                                 'Intake '
                                                                                 'Sterilized',
                                                                                 'Intake '
                                                                                 'Season'])])),
                                              ('randomforestclassifier',
                                               RandomForestClassifier(class_weight='balanced',
                                                                      max_features=0.8,
                                                                      random_state=0))]))],
                 voting='soft')
Please rerun this cell to show the HTML repr or trust the notebook.

À la suite de cette étude préliminaire, on considère que les modèles linéaires et de forêt aléatoires considérés apprennent des caractéristiques suffisamment différentes pour que malgré des performances très proches pris isolément, la combinaison de leur décision permet d'obtenir de meilleurs résultats. On conserve ainsi le modèle de classification par vote doux.

Régression

Concernant la régression, nous allons utiliser un modèle de forêt aléatoire à gradient boosté, cette approche permettant d'entraîner un modèle souvent performant sans hypothèse particulière sur la nature des observations. Ainsi, voici le diagramme correspondant à notre modèle de régression qui suppose l'accès à la prédiction du type de sortie (modèle conditionnel de régression).

Pipeline(steps=[('columntransformer',
                 ColumnTransformer(transformers=[('numerical-passthrough',
                                                  'passthrough',
                                                  ['Intake logAge',
                                                   'Intake Year']),
                                                 ('ordinal-encoder',
                                                  OrdinalEncoder(handle_unknown='use_encoded_value',
                                                                 unknown_value=-1),
                                                  ['Animal Subtype', 'Sex',
                                                   'Named', 'Intake Type',
                                                   'Intake Condition',
                                                   'Intake Sterilized',
                                                   'Intake Season',
                                                   'Outcome Type Pred'])])),
                ('gradientboostingregressor',
                 GradientBoostingRegressor(learning_rate=0.01, max_features=0.8,
                                           n_estimators=500))])
Please rerun this cell to show the HTML repr or trust the notebook.

Comparaison des résultats

On propose d'estimer le taux de bonne classification pondéré et l'erreurs quadratique moyenne par découpages apprentissage/test répétés $5$ fois en utilisant une grille de paramètres $\alpha$. L'approche aveugle correspond au cas $\alpha=0$ et l'approche d'oracle correspond au cas $\alpha=1$. Commençons par le cas où l'on estime en premier la loi marginale du type de sortie, autrement dit où l'on opère une pré-classification puis une régression.

Calibration du paramètre $\alpha$ pour la régression

On calibre le paramètre $\alpha$ pour la régression, c'est-à-dire dans le cas où l'on a procédé à une première étape de pré-classification.

Voici le résultat de la procédure de validation par découpages apprentissage/test répétés.

Taux de bonne classification pondéré : 70.49%
Meilleure erreur quadratique moyenne : 2.85 (alpha = 0.05)

Résultats de test

Voici les résultats obtenus sur l'ensemble de test par classification puis régression.

Taux de bonne classification pondéré : 70.22%
Erreur quadratique moyenne : 2.82

Calibration du paramètre $\alpha$ pour la classification

On calibre le paramètre $\alpha$ pour la classification, c'est-à-dire dans le cas où l'on a procédé à une première étape de pré-régression.

Voici le résultat de la procédure de validation par découpages apprentissage/test répétés.

Meilleur taux de bonne classification pondéré : 0.70% (alpha = 0.00)
Erreur quadratique moyenne : 2.92

Résultats de test

Voici les résultats obtenus sur l'ensemble de test par régression puis classification.

Taux de bonne classification pondéré : 67.97%
Erreur quadratique moyenne : 2.87

Bilan des résultats

Grâce aux résultats obtenus, nous sommes en mesure de répondre aux deux questions que nous nous étions posées dans le cadre de l'estimation d'une loi conditionnelle. Tout d'abord, on remarque que sur nos données, il est plus efficace de procéder à une étape de pré-classification puis à une régression conditionnelle que l'inverse, malgré l'équivalence théorique de ces deux approches. En effet, les résultats obtenus pour la classification sont ainsi meilleurs, et l'erreur quadratique est également très légèrement inférieure sur l'ensemble de test.

Ensuite, il est évident à la vue des graphiques de calibration des paramètres $\alpha$ qu'il est plus efficace d'adopter une approche aveugle dans l'entraînement des modèles conditionnels, c'est-à-dire qu'il est préférable de conditionner sur les prédictions du modèle marginal lui-même estimé plutôt que sur les vrais valeurs. Cela peut paraître surprenant, mais nous l'avons vérifié numériquement sur cette exemple, et par ailleurs on peut l'expliquer par le fait qu'en pratique, c'est bel et bien sur des prédictions effectuées par notre modèle marginal que le modèle conditionnel devra lui-même prédire. Ainsi, l'approche aveugle est plus fidèle à la méthodologie finalement appliquées à des nouvelles observations.

Conclusion

Nous sommes très heureux d'avoir travaillé sur ces données provenant d'un refuge animalier, car elles nous ont permis de nous confronter à des problèmes rarement rencontrés dans le cadre de notre formation, comme la prévalence de variable qualitatives cumulé à des modalités souvent très déséquilibrées. La prédiction d'une réponse bivariée nous a également forcé à adopter une approche spécifique, et nous avons fait preuve de créativité pour proposer une méthode d'estimation de la meilleure stratégie à adopter dans ce contexte. Enfin, et c'est aussi ça l'intérêt, ce travail nous a permis d'appliquer un grand nombre de méthodes apprises en cours, de l'analyse descriptive à la conception de modèles de prédiction, en passant par les tests d'hypothèse.