[PYTHON] Résumé de Kaggle: Outbrain # 2

2nd place solution Présentation de l'approche du finaliste. 2nd place solution | team brain-afk Génération de fonctionnalités, modèles multiples, empilement et personnalisation FFM.

Quantité de fonctionnalités la plus importante

Il y a des endroits où la compréhension de la traduction anglaise est douteuse, donc si vous êtes intéressé, veuillez vérifier le texte original. Il y a quelques questions dans la partie discussion en bas.

Modèle utilisé dans la couche 1

Sauf pour LibFFM et FTRL, cela peut être similaire à une compétition de classification normale. Je pense qu'il est assez rare d'avoir Liblinear. Keras est-il juste un perceptron multicouche? Aucune mention particulière n'est faite.

Alexey a personnalisé FFM. En conséquence, la vitesse est augmentée et la consommation de mémoire est faible. Le code de k sera publié sur github immédiatement.

CV&Meta Modeling Les mots «belnd» et «stacking» mentionnés ici sont l'histoire de l'apprentissage d'ensemble.

Nous avons utilisé 6 millions de lignes comme ensemble d'auto-validation et échantillonné en fonction de la structure de l'ensemble de test. (2 jours futurs, 50% de jours communs / 50% de lignes de jours futurs). En outre, un sous-ensemble d'environ 14 millions a été utilisé pour la formation de nouvelles idées plus rapidement (?).

Avant qu'Alexey ne rejoigne l'équipe, 20 modèles layer1 ont été exécutés dans 6M sets, avec une amélioration de 0,003 point sur le tableau public. Ensuite, j'ai appris les données de 6M définies avec le modèle de mélange de XGBoost & Keras. (=> pas de jours communs / jours futurs de séparation (que voulez-vous dire ???))

Au cours de la dernière semaine de la date limite, un modèle s'est beaucoup amélioré et le résultat de l'empilement s'est amélioré. Dans la prédiction de la couche 1, le temps généralisé a été utilisé comme quantité d'entités pour la couche 2. Cela a amélioré le score de 0,00020. Alexey a rejoint et a terminé la soumission finale en fusionnant et en mélangeant les données de pile qu'il avait.

Final solution Nous avons soumis les résultats d'ensachage de la méta-pile d'Alexey, XGBoost et Keras par moyenne géométrique. Le poids a été déterminé intuitivement en référence au score LB.

Best single model L'implémentation sh FFM personnalisée d'Alexey a donné la meilleure précision. 0,70017 dans le leader public boarc

Fonctionnalités de rcarson

Extrait lean en 30 minutes avec une petite mémoire publié par rcarson Présentation de la génération de quantité de fonctionnalités du code). (Gist est ici)

Il existe deux données à utiliser, page_views.csv et Promu_content.csv. Pour résumer, page_views contient l'identifiant de la page Web que l'utilisateur a visitée, et promu_content contient les détails de chaque identifiant de publicité.

for c,row in enumerate(csv.DictReader(open('../input/promoted_content.csv'))):
    if row['document_id'] != '':
        leak[row['document_id']] = 1 

Si un identifiant de document est inclus dans Promu_content, marquez la fuite.

filename = '../input/page_views.csv'
filename = '../input/page_views_sample.csv' # comment this out locally
for c,row in enumerate(csv.DictReader(open(filename))):
    if count>limit:
	    break
    if c%1000000 == 0:
        print (c,count)
    if row['document_id'] not in leak:
	    continue
    if leak[row['document_id']]==1:
	    leak[row['document_id']] = set()
    lu = len(leak[row['document_id']])
    leak[row['document_id']].add(row['uuid'])
    if lu!=len(leak[row['document_id']]):
	    count+=1

Après cela, lorsqu'une page contenant Promu_content arrive à page_views, son ID utilisateur (uuid) est ajouté.

for i in leak:
    if leak[i]!=1:
	    tmp = list(leak[i])
	    fo.write('%s,%s\n'%(i,' '.join(tmp)))
	    del tmp

Enfin, les informations du document contenant un ou plusieurs uuids inclus dans la fuite sont écrites dans le fichier.

En regardant le fichier exporté, il ressemble à ceci.

Screen Shot 2017-03-10 at 16.20.29.png

Le fichier de lien de document_id et uuid est terminé. En d'autres termes, il s'agit d'un fichier qui décrit l'utilisateur visité sur une page Web unique.

À propos de libffm

Il s'agit d'une version avancée du filtrage coopératif et de la FM. Il a été fréquemment utilisé depuis le milieu de l'année dernière dans des concours traitant de telles données.

Depuis le 9 mars 2017, suite à la tentative d'installation de libffm sous Linux et Mac, des bogues se produisent. Le problème est que le dernier sdk n'a pas de nanosocket et que l'importation ffm ne peut pas être effectuée lorsqu'elle est installée avec une version antérieure. Le problème turi-code et le débordement de pile ont été à l'ordre du jour à plusieurs reprises, mais il semble qu'ils n'aient pas été résolus. Par conséquent, l'exemple de programme libffm fréquemment utilisé par les participants au concours n'est pas utilisé ici. C'est dommage car c'est une bibliothèque qui a donné de très bons résultats cette fois.

Une fois le problème résolu, je couvrirai les détails dans un autre article.

FTRL-Proximal SRK a publié du code python en utilisant FTRL. Cliquez ici pour l'essentiel.

FTRL est l'algorithme utilisé par Google pour la prédiction du CTR ceci est l'article original.

On dit qu'il utilise un programme qui utilise vowpal wabbit et ce code. Je n'ai pas réellement utilisé vowpal wabbit, mais comme il est utilisé par les supérieurs de Kaggle, je pense à l'implémenter avec FTRL et à le télécharger comme un autre article. Il semble que la corrélation avec le résultat prédit par un classificateur tel que Tensorflow soit faible, et elle peut être utilisée lors de la combinaison dans l'apprentissage d'ensemble.

liblinear Un outil de prédiction linéaire pour les grands ensembles de données. Il est rare de le voir utilisé dans les compétitions, mais cela semble conduire à des scores inopinément plus élevés. Site de référence (anglais)

Recommended Posts

Résumé de Kaggle: Outbrain # 2
Résumé de Kaggle: Outbrain # 1
Résumé lié à Kaggle
Résumé de Kaggle: Redhat (Partie 1)
Résumé de Kaggle: BOSCH (noyaux)
Résumé Kaggle: BOSCH (gagnant)
Résumé de Kaggle: Redhat (partie 2)
Résumé de la méthode du noyau de Kaggle [Image]
Résumé de Kaggle: Analyse du panier de marché Instacart
Résumé de Kaggle: BOSCH (intro + discussion du forum)
[Enquête] Kaggle - Résumé de la solution Quora 3e place
Résumé Python
[Enquête] Kaggle - Résumé de la solution Quora 5e place
Résumé de Django
Résumé de python-pptx
[Enquête] Kaggle - Résumé de la solution Quora 4e place
Résumé Linux
Résumé Python
Résumé de Django
résumé pyenv
Résumé de la chaîne de caractères 1
résumé pytest
Résumé matplotlib
[Enquête] Kaggle - Récapitulatif de la solution Quora 2nd place
Résumé de Kaggle: Planète, comprendre l'Amazonie depuis l'espace
Résumé de la méthode Kaggle's Kernel [Table time series data]