Se connecter

Ou se connecter avec
Date limite de participation :
31 janvier 2014

Score de délivrance d’un brevet européen

Le challenge consiste à proposer un modèle de score de la probabilité de délivrance d’un brevet.

Classement
1. (1) Eric Biernat Score 0,722756
2. (2) Christophe Bourguignat Score 0,722054
3. (5) AshtonIzmev Score 0,721740
Ce challenge est terminé.

2 000

€ 

700

contributions

82

participants

terminé
terminé

Eric a remporté le challenge de la Caisse des Dépôts et Consignations

Demandons à Eric de se présenter et de nous expliquer la démarche qu'il a employée et les difficultés qu'il a rencontrées. 
Le 09/04/2014

Bonjour Eric, tu as récemment remporté le challenge « Brevets » organisé par la Caisse des Dépôts et Consignations. Félicitations car la concurrence était rude ! Peux-tu te présenter en quelques mots ?

Eric : Merci beaucoup ! Effectivement, la concurrence était rude mais c'est bien pour ça qu'on signe après tout... Je me prête donc à l'exercice de la présentation.

Côté formation initiale, je suis diplômé de Centrale (promotion 2002) avec une majeure en informatique scientifique. J'ai eu ensuite un parcours mixte entre technique et matières plus molles (marketing, business, management) notamment dans le domaine des services financiers. J'ai découvert le mouvement Big Data Analytics il y a 3 ans, je ne l'ai pas lâché depuis, ravi de voir que la technique et les mathématiques revenaient enfin sur le devant de la scène. 

J'ai aujourd'hui la responsabilité de l'activité Big data analytics chez OCTO Technology, cabinet spécialisé dans les nouvelles technologies. J'ai à ce titre la chance de diriger une équipe fantastique constituée d'architectes Big Data, Datascientists et consultants Big Data Analytics. Mon quotidien est donc rempli des thématiques qui me passionnent, ce qui ne m'empêche pas de continuer le soir avec datascience.net avec mes collègues d'OCTO où nous partageons une R&D très fertile sur le machine learning (par exemple Issam, Matthieu et Simon ont testé sur ce concours des approches avancées comme le stacking ou le deep learning).

Pourrais-tu nous décrire rapidement les méthodes statistiques et outils technologiques que tu as utilisés pour mettre au point ton modèle, ainsi que les raisons qui t’ont conduit à ces choix ?  

Eric : La stack utilisée est assez classique des concours de datascience : python, notebook ipython, matplotlib pour la dataviz, pandas (librairie permettant de manipuler des dataframes comme dans R) et sklearn, l'excellentissime API de machine learning dont je suis un grand fan.

Un premier travail préparatoire consistait à tracer les data pour comprendre le problème et identifier les premières variables discriminantes.
Pour ce faire, j'utilise 2 méthodes :
  • une méthode industrielle fournie dans l'API sklearn et qui permet d'évaluer unitairement une variable par rapport à la cible : selectKbest qui permet de sortir les k meilleures features parmi
  • une méthode graphique qui permet d'évaluer visuellement les données, notamment par des histogrammes valorisés par rapport à la cible, et de détecter si une variable est particulièrement discriminante. Par exemple, on se rend compte qu'il est statistiquement plus difficile d'obtenir son brevet en 2009 qu'en 1990, la date sera donc une variable importante à travailler dans la suite du problème.
En parallèle, un premier modèle en mode "quick and dirty" est mis au point avec juste un travail de qualité de données sur les valeurs manquantes et/ou aberrantes, et une binarisation des variables catégorielles (i.e. remplacer une variable catégorielle prenant n valeurs distinctes en n vecteurs binaires). Les valeurs manquantes ont été remplacées soit par la dernière valeur non nulle dans la colonne (pour les dates par exemple) soit par des moyennes par rapport à une catégorie (nombre de citations). Ce travail relativement simple permettait de tangenter déjà un score de 70%.

Côté algorithme, je n'ai utilisé que des méthodes ensemblistes (random forest et extra trees) qui disposent d'un paramètre très utile : compute_importance qui permet grosso modo de connaître les variables qui sont choisies fréquemment par l'algorithme et qui se situent haut dans l'arbre. Cela permet une nouvelle fois d'identifier d'autres variables discriminantes et c'est là que le vrai modèle commence.

Les variables catégorielles sont nombreuses, les remplacer par une valeur continue est loin d’être suffisant pour obtenir des résultats performants avec les méthodes ensemblistes. Outre la binarisation des variables catégorielles, j'essaie d'aider quelque peu le classifieur en assignant quand c'est possible une valeur continue permettant la comparaison. Cela permet de modéliser des intuitions, comme le fait qu'il est différent d'obtenir un brevet dans le domaine des nanotechnologies aux USA et en Slovénie, l'enjeu financier n'étant pas le même. J'ai utilisé des approches très empiriques, proches de la notation crédit, en notant les quelques pays ayant le plus de support et en assignant une moyenne pour les autres. Une autre méthode peut consister à remplacer une variable catégorielle par la moyenne de la cible sur cette variable. Attention toutefois, cette méthode peut s'avérer dangereuse si les fichiers d'entrainement et de test n'ont pas exactement les mêmes distributions.

Les variables continues sont projetées sur les variables catégorielles afin de créer de nouvelles variables, permettant de positionner une valeur continue par rapport à sa moyenne dans une catégorie donnée. Cela permet de mieux apprécier une variable continue.
Par exemple : 
  • id_brevet = 12345, (..), pct_nb_ipc = 0.19, Technology_sector = 3
  • On ajoute pour cet id la moyenne des pct_nb_ipc pour le secteur technologique numéro 3.

Mais je pense que la clé du problème se situait dans la discriminance très forte d'une variable en particulier : voie_dépot. En effet, la modalité "voie-directe" comporte beaucoup de variables continues très précieuses (idx_origin, idx_radic, nb_backward_xxx, etc) alors que la modalité "euro-pct" dispose d'une proportion de variables catégorielles plus importantes. Le travail des features n'est donc pas le même.

Le modèle final se décompose en donc 2 sous-modèles, un pour les brevets "europct" (176 825 lignes) et un autre pour les brevets "voie-directe" (212 321 lignes).

Le modèle final est un blend assez simple de plusieurs outputs (sorte d'ensemble d'ensembles) parce qu'il s'agit d'une moyenne des outputs de 2 modèles suivants :
  • Le nombre d'arbres pour le RandomForest est 1200 et la profondeur maximum est de 16.
  • Pour l'ExtraTree, le nombre d'arbres est de 1400 et la profondeur est de 17.

Les meta-paramètres ont été choisis à l'issue d'une étude gridsearch.

2 petites astuces pour terminer :
  • Le fichier d'entrainement comportait des cibles non remplies ! Attention aux méthodes industrielles de remplissage des valeurs manquantes, car on se retrouve à entraîner un classifieur sur des data qui ne sont pas correctement labellisées. Ces lignes ont donc été exclues de mon modèle. Avec ce filtre, le fichier d'entrainement ne comportait finalement que 389 146 lignes.
  • Des valeurs de features n'apparaissent que dans le fichier d'entrainement et pas dans le fichier d'évaluation. Ces données sont aussi à filtrer afin de ne pas entraîner inutilement le modèle sur des données qu'il ne verra pas dans le fichier de test.

Datascience.net est une initiative encore récente et à l’écoute de toute proposition d’axes de progrès. Quelles seraient tes suggestions en la matière ?

Eric : Tout d'abord, bravo pour cette initiative. Rassembler la communauté des data scientists français est une excellente idée.

J'avais quelques remarques partagées par beaucoup mais que vous avez déjà mis en place : partager les gains avec les 3 premiers, et avoir un classement public/privé. Donc merci pour la prise en compte rapide des remarques des participants.

J'ai encore 2 suggestions : 
1 - Limiter le nombre de soumissions par jour. 
Déjà, cela nous aurait sauvé une soirée, à Christophe Bourguignat et moi le dernier soir ! ;) 
Ensuite, ça permettrait d'éviter encore une fois l'overfitting un peu sauvage. Un nombre illimité de soumissions peut vite ressembler à ça. Je pense que 5 soumissions par jour est un excellent compromis.
2 - Disposer d'un classement datascience.net. Autrement dit, que chaque concours serve un classement global avec une logique de points plus ou moins difficiles à obtenir. Par exemple, un concours facile avec peu d'enjeu ne donnera pas autant de points qu'un autre concours avec beaucoup plus de compétition.

Si vous implémentez ça, je pense qu'on ne sera pas loin de la perfection.

Bon courage à tous et à bientôt sur d'autres challenges !

Merci Eric pour ton témoignage et tes suggestions. Surveille les évolutions du site dans les mois à venir, tu ne devrais pas être déçu ;)

L'objectif est de calculer un score pour prédire l'issue d'une demande de brevet déposée auprès de l'Organisme Européen des Brevets (OEB) : délivrance, ou non-délivrance (par rejet de la demande ou abandon du déposant).

La demande de brevet déposée contient de nombreuses informations potentiellement explicatives de la (non-)délivrance du brevet :

  • Sa date de dépôt
  • Le pays prioritaire (pays où la demande a été enregistrée avant le dépôt auprès de l'OEB)
  • Son champ technologique du brevet
  • Sa langue de dépôt du brevet
  • Les nombres de brevets qu'il cite
  • La durée écoulée entre le dépôt et la décision de (non-)délivrance
  • Le nombre d'inventeurs
  • Le nombre de mots dans le texte de description
  • Le nombre de revendications
  • etc.

Le fichier que doit fournir le candidat est un fichier au format .csv, dont la structure est la suivante :

ID;PROBA
12974163;0,4256526524
12977563;
0,1255442656
12979708;
0,6544584645
...
...

Le fichier attendu doit prendre la forme d'un fichier au format .csv, contenant une ligne d'entête et deux colonnes :
  • L'identifiant de la demande de brevet (ID)
  • La probabilité d'octroi estimée (PROBA)
Le critère de performance retenu pour l'évaluation de ce modèle est l'aire sous la courbe ROC (probabilité pour que le score d'un brevet délivré soit supérieur au score d'un brevet non délivré), calculée pour les demandes de brevet de l'échantillon de validation.

Plus d'information sur la courbe ROC :

Ce critère peut être facilement estimé, par exemple en langage R (en utilisant le package ROCR) :
library(ROCR)
pred <- prediction(estimations, observations)
roc <- performance(pred,"auc")
aroc <- as.numeric(roc@y.values)
Procédure de délivrance d’un brevet par l’OEB :
http://www.epo.org/applying/basics_fr.html 

Documentation OCDE à partir de laquelle des indicateurs ont été ajoutés aux données intiales de brevets :
http://www.keepeek.com/Digital-Asset-Management/oecd/science-and-technology/measuring-patent-quality_5k4522wkw1r8-en#page1 

1. (1) Eric Biernat 88 contributions 31/01/14 21:33 Score 0,722756
2. (2) Christophe Bourguignat 99 contributions 31/01/14 22:02 Score 0,722054
3. (5) AshtonIzmev 63 contributions 31/01/14 21:47 Score 0,721740
4. (6) Arnaud de Myttenaere 32 contributions 30/01/14 22:42 Score 0,716284
5. (3) jc 27 contributions 23/01/14 21:57 Score 0,714928
6. (4) Matthieu Lagacherie 68 contributions 29/01/14 22:50 Score 0,713176
7. (7) Dominique Emmanuel 17 contributions 31/01/14 21:00 Score 0,712598
8. (11) Alexis D 36 contributions 29/01/14 20:59 Score 0,712273
9. (10) Martin B 8 contributions 28/01/14 18:28 Score 0,702461
10. (8) agramfort 6 contributions 07/01/14 12:10 Score 0,700053
11. (9) simonmab 59 contributions 29/01/14 13:01 Score 0,692558
12. MR 7 contributions 31/01/14 22:07 Score 0,678736
13. Stéphane FENIAR 30 contributions 30/01/14 10:35 Score 0,677387
14. (13) Christophe C. 75 contributions 31/01/14 09:24 Score 0,677021
15. Mathilde Didier 24 contributions 31/01/14 16:50 Score 0,669870
16. (12) Arthur Flam 4 contributions 25/01/14 10:25 Score 0,653070
17. (14) Chris Aude 12 contributions 27/01/14 23:48 Score 0,627813
18. (15) aaaaaaa aaaaaa 2 contributions 03/01/14 01:39 Score 0,602798
19. (16) Matthieu Bizien 2 contributions 15/01/14 23:33 Score 0,545730
20. (17) Aoxi 1 contribution 09/01/14 00:21 Score 0,422603
Discussions
loading... Chargement...