Compétition VK Sup. Track ML. 4ème place. Comment?

image

Dans ce concours, qui s'est déroulé dans le cadre du tour de qualification de VK up 2020 , piste ML , il était nécessaire de prédire la proportion de publics potentiels qui verraient des publicités affichées sur plusieurs plateformes publicitaires un nombre spécifique de fois: 1,2,3 à l'avenir.

Ce n'était pas une compétition classique pour envoyer des prédictions finales à des données de test connues, mais une prédiction sur des données complètement inconnues soumises au modèle en docker lancée sur le site de la compétition.

En général, une telle solution égalise les chances des participants et ne permet pas à ceux qui aiment jeter un œil au test, d'enrichir l'ensemble de données de formation avec eux et d'adapter le modèle à la distribution des données du test. Ici, tout le monde était sur un pied d'égalité, car on ne sait pas ce qui pourrait être dans les données: données «indésirables», valeurs aberrantes sporadiques, délimiteurs invalides, etc. Mais toutes ces nuances en même temps nous font penser à la gestion des exceptions.

Dans ce concours, j'ai pris une 4e place discrète et je veux dire comment c'était possible.

Présentation des données


Les données initiales ont été présentées sous la forme suivante:

  1. users.tsv – : , , . , , , . ( ), .
  2. history.tsv — "-", ( ) . , , .
  3. Le fichier validate.tsv est un fichier de validation pour la formation du modèle, il contenait simplement des données sur à quel intervalle de temps et à quel prix une annonce a été diffusée pour un public spécifique (plateforme et utilisateur). Les utilisateurs et les sites ont été donnés sous forme de chaîne du formulaire (1,5,7,3,14,6).
  4. Fichier validate_answers.tsv - un fichier de réponses se compose de trois colonnes: quel pourcentage (valeurs de 0 à 1), l'audience semble classée 1, 2, 3 fois. Par conséquent, ces séquences n'augmentent pas.

Le but du concours : prédire trois ensembles de valeurs pour de nouvelles données du futur (au format de fichier validate.tsv ) - quelle proportion de l'audience verra une annonce 1.2, 3 fois.

Plus de détails sur la tâche sur le site du concours .

Prédicteurs


Les prédicteurs finaux que j'ai utilisés sont un ensemble de 2 complexes:

  • prĂ©dicteurs basĂ©s sur l'historique et leur comparaison avec de nouvelles donnĂ©es
  • prĂ©dicteurs uniquement sur les donnĂ©es de l'avenir

Parmi le premier complexe, basé sur le fichier historique, des statistiques de base ont été générées pour les paires utilisateur-site regroupées , puis leur agrégation à la paire utilisateur-site dans les fichiers de validation et de test. Cela a été suivi par la sélection des prédicteurs de différentes manières - à la fois en fonction des fréquences d'utilisation des prédicteurs aux étapes de partitionnement et d'utilisation dans le modèle lui-même, et des validations, de haut en bas et de bas en haut. Malgré les différents schémas de sélection, en général, tout se résumait à environ un ensemble de prédicteurs et par conséquent il y en avait sept.

L'interprétation des prédicteurs du deuxième complexe (il y en avait également sept étonnamment) est généralement beaucoup plus simple:

1. Delta- différence de temps. Est-ce logique? Logiquement: plus l'intervalle est grand, plus les vues sont probables. Bien sûr, il n'y a pas de dépendance directe, mais physiquement, il devrait en être ainsi; de plus, c'est l'un des prédicteurs les plus solides si nous les considérons séparément.

2. Delta2 est également un décalage horaire, mais converti par jour (c'est-à-dire une division entière par 24). Autrement dit, nous transformons une dépendance linéaire en dépendance par morceaux. L'idée ici est simple: nous ne faisons pas de distinction entre les heures, mais de très longs intervalles (jours) détermineront leur propre tendance.

3. cpm - le prix lui-même, de la même manière: plus le prix est élevé, plus il est probable qu'il s'affiche, encore une fois, bien sûr, il n'y a pas de dépendance directe, mais dans le «flirt» avec d'autres prédicteurs basés sur l'histoire, la dépendance est clairement tracée.

4-7. Ce sont le péché et le cos des heures de début et de fin des annonces, qui sont également traduits dans la chronologie de 24 heures. L'utilisation de ces fonctions, contrairement au temps linéaire, vous permet de prendre en compte les intervalles de temps qui traversent la journée. L'utilisation de ces prédicteurs a immédiatement donné une amélioration de 1,5 point de pourcentage.

Métrique et réponse


La métrique Smoothed Mean Log Accuracy Ratio (ci-après SMLAR ) présentée par les organisateurs .

image

Lorsque la réponse initiale est présentée dans la proportion de l'audience qui a vu l'annonce 1,2,3 fois, c'est-à-dire les valeurs dans la plage [0,1].

Soit dit en passant, le KDPV indique le comportement de cette métrique, ou plutôt, pas la métrique entière, mais sa partie ( MAE pour le logarithme des biais de prédiction) pour toutes les combinaisons de la prédiction et la vraie valeur sur toute la plage [0,1].

Si vous regardez attentivement la formule de la métrique, alors: d'une part, cette métrique correspond approximativement à la moyenne géométrique des ratios des prédictions et à la vraie valeur (avec biais), ce qui est clairement meilleur que la moyenne arithmétique (en raison du résultat final inférieur). D'un autre côté, si nous omettons l'exposant, qui à de faibles valeurs se comporte presque comme l'exposant de son degré, la métrique est transformée en MAE par le logarithme de la réponse avec un décalage. Ainsi, pour construire des modèles idéologiquement corrects, il était nécessaire d'utiliser la réponse initiale avec un décalage et la fonction de perte dans laquelle il existe un logarithme sous forme explicite, ou, à l'inverse, d'utiliser d'abord le logarithme de réponse de décalage et une fonction de perte linéaire ( MAE , eps) Mais, compte tenu de mon modèle (dans lequel la fonction de perte n'est pas explicitement spécifiée), j'ai choisi la transformation optimale de la réponse en fonction des résultats du modèle de validation.

J'ai considéré les options de réponse suivantes - partages d'origine, logarithme des partages, transition vers les valeurs absolues du nombre d'utilisateurs, leur logarithme avec différents décalages (ici, il y a eu une tentative d'utiliser un décalage unifié lors du passage aux valeurs absolues, car le décalage de 0,005 est indiqué pour les partages et le public était différent, de 300 à 2500, donc le décalage doit être compris entre 1 et 12, mais je n'ai vérifié que les valeurs 1 et 10) et la racine de la valeur absolue des personnes consultées.

image

L'image ci-dessus montre les résultats de deux modèles qui se sont entraînés pour une réponse différente: les parts d'audience initiales et le nombre absolu de participants.

Le diagramme supérieur montre les valeurs triées de la vraie réponse (par fractions du premier balayage) et les valeurs prédites pour les deux modèles. Il est immédiatement clair que la plupart des valeurs de réponse sont assez petites, donc la valeur médiane est d'environ 5%, et ce n'est que pour le premier balayage (pour le deuxième balayage, la médiane est déjà inférieure à 1%, et pour le troisième balayage près de 0%, et pour cette métrique, de petites valeurs et des erreurs sur ils sont très désagréables). Il est également clairement visible dans ce diagramme que le modèle par valeurs absolues est qualitativement meilleur, la dispersion des estimations est assez minime, et malgré le fait que les écarts ne sont presque pas visibles sur le graphique à de petites valeurs, par conséquent, ce sont les erreurs à ces petites valeurs qui affectent fortement résultat final. La même chose peut être vue sur KDPV, courbure très nette à faibles valeurs, surtout proche de zéro.

Le diagramme moyen montre l'erreur de chaque prédiction triée; de ​​fortes erreurs à de petites valeurs et leur diminution avec l'augmentation des valeurs de réponse sont visibles.

Sur le diagramme du bas, le diagramme de la métrique directement ciblée est déjà en cours de construction avec le total accumulé pour toutes les valeurs triées. Quelles sont les conclusions de tout cela? La première est que la réponse sélectionnée affecte fortement les résultats du modèle, mais plus sur celle ci-dessous, la deuxième conclusion, accordez une attention particulière aux petites valeurs, en particulier proches de zéro, il est évident que les modèles ne seront pas toujours en mesure de prédire un zéro pur, des corrections sont donc nécessaires. Et les erreurs aux grandes valeurs ne sont pas si importantes, premièrement, elles sont relativement petites, et deuxièmement, le pourcentage d'erreur aux grandes valeurs sera petit, et en même temps il apportera une contribution totale minimale à la métrique.

En conséquence, selon les résultats de nombreuses expériences, le gagnant avec une marge claire était la réponse - la racine des valeurs absolues des utilisateurs. Dans le même temps, sur des prédictions différentes (par 1, 2, 3 vues), parfois des modèles avec un logarithme de valeurs absolues ont également gagné, cela est dû à une nette prédominance de 0 dans les réponses, et, par conséquent, le logarithme avec un certain biais était meilleur. Mais si vous faites la moyenne, alors une racine simple sans aucun biais a montré de bons résultats stables, donc je ne voulais pas compliquer la décision, mais m'arrêter sur une méthode unifiée simple - juste la racine des gens.

Quelle est la raison du fait que la transition vers les personnes améliore considérablement le résultat par rapport aux parts (près de 2 fois)?

Apparemment, le fait est qu'en se tournant vers les gens, en multipliant la part par le public, ou la même chose que de diviser tous les prédicteurs par le même public, nous entrons dans la dimension relative à "une personne", et considérant que la base de mon modèle est la régression, l'estimation finale est une sorte d'estimation de probabilité pondérée relative à chaque prédicteur. Il est possible que si nous normalisons seulement une partie des prédicteurs au public, par exemple, à partir des prédicteurs du premier groupe (la somme sur toutes les paires, par exemple), alors cette normalisation rapprocherait ainsi les dimensions de tous les prédicteurs d'un système de rapport unique (par personne), et de la régression finale , sa réponse, ne serait rien de plus que la somme moyenne pondérée des contributions de chaque prédicteur (qui caractérisent une personne) à la probabilité totale de visualisation, alors peut-être que le résultat serait meilleur.Mais au moment de la décision du concours, je ne me suis pas approché de ce côté et j'ai travaillé exclusivement avec une réponse transformée.

Modèle


En fait, cette section devait être mise plus haut, car c'était à cause de ce modèle que nous devions sélectionner le type de réponse et les prédicteurs nécessaires utilisés pour cela (le modèle a été ajusté aux données) et, d'une manière ou d'une autre, il était possible d'atteindre une réponse acceptable sur différents prédicteurs le résultat est d'environ 15%. Mais je voulais qu'en moyenne, il y ait une justification au choix de prédicteurs spécifiques, par conséquent, des combinaisons de prédicteurs ont été sélectionnées pour la validation.

J'ai utilisé un modèle issu d'une famille d'arbres modèles de régression, à savoir le modèle cubiste (modèle 1992!), Et sa mise en œuvre dans le package du même nom en R. Le résultat final est plutôt la moyenne géométrique de deux ensembles de modèles, chacun composé de 3 modèles distincts, mais en cascade: la prédiction du modèle précédent (pour 1 vue) a été utilisée comme prédicteur pour les deuxième et troisième modèles, et la prédiction finale pour la deuxième vue comme prédicteur pour le troisième modèle. Les deux paires de modèles différaient légèrement dans les prédicteurs et les ajustements intermédiaires, et leur moyenne géométrique a été utilisée sur la base du bon sens (enfin, validations, avec un cours public), et le sens est simple: comme je l'ai écrit ci-dessus, une attention particulière est accordée à zéro prédictions, et généralement à minime , et la moyenne géométrique est exactement ce qu'elle fait: elle fait disparaître la prédiction si l'un d'eux est déjà nul (et cela est logique si l'un des modèles a montré zéro, alors laissez-le rester,que nous «retarderons» la prédiction à partir de zéro).

Et grâce à la cascade de modèles, le modèle a indirectement «compris» (depuis les régressions) que chaque réponse subséquente «s'accroche» à cette réponse prédite précédemment de l'estimation précédente, et les prédicteurs restants corrigent la réponse, qui ne devrait pas être supérieure à la précédente. J'ai également testé trois modèles distincts qui prédisaient les réponses individuellement. Le résultat était plus faible en raison de l'abondance de zéros dans les deuxième et troisième balayages, la famille de régressions ne pouvait pas tout à fait aller à 0, et lorsque nous ajoutons un «guide» à l'estimation précédente, qui est déjà 0 ou proche de celle-ci, la famille de régressions résultante tombe également à proximité de cette valeurs et ajuste uniquement la réponse à la deuxième et troisième visualisation.

Qu'est-ce qui est bien avec ce modèle?

Quand j'ai vu la tâche, je me suis immédiatement souvenu de ce modèle, car lors d'une des compétitions précédentes dans un problème comparable (relations linéaires et leurs corrections) c'était aussi l'une des meilleures, et en général, nous avons des données assez linéaires ici, il y a une relation évidente entre les quantités vues (la seconde est inférieure à la première, la troisième est inférieure à la seconde), il y a peu de données - seulement 1008 observations, il y a un petit nombre de prédicteurs, probablement une sorte de dépendances linéaires brisées. De plus, ce modèle est très rapide, la construction a pris plusieurs secondes, il lui a donc été pratique de tester de nombreuses hypothèses. Et pourtant, elle n'a pas d'hyperparamètres (à l'exception des voisins (un autre paramètre est une prévision corrective), que je n'ai pas utilisé), sur lesquels je pourrais me recycler.

Comment est la prédiction dans ce modèle pour un arbre?
, , 100 ( , , 10-20 ), , , , : ( ), , ( , ) .

, , .

Ajustements


De plus, de petits ajustements des prédictions ont été utilisés, à savoir: lors du passage du nombre absolu de personnes à leurs parts, des situations de très petites valeurs (positives, un peu plus de 0 ou plus de 1) se sont potentiellement produites, et si dans le cas de valeurs supérieures à 1, leur ajustement n'a pas joué un rôle plus important (il y avait probablement peu de vols de ce type, et s'ils l'étaient, alors non significatifs), mais dans le cas de petites valeurs, c'était relativement critique. Par raisonnement, il a été admis que si je prédis, par exemple, 1 personne (ou 0,5 personne, l'arrondissement n'a pas été effectué), puis avec une audience maximale de 2500 (ce qui est complètement inconnu avec les données connues dans le train, ce qui se passe vraiment sur les données de test), ce qui est 0,0004 (au fait, et dans le train, la valeur minimale est 0,0004),cela signifie quelque part au voisinage de cette valeur, il est nécessaire de ramener les valeurs inférieures à 0, et étant donné que mes modèles sont construits dans une chaîne, la construction du modèle suivant et ses prédictions dépendent du zéro prédit, etc. cela a beaucoup influencé.

Cela n'avait pas beaucoup de sens de sélectionner un seuil de validation (parce que le modèle s'adapte de toute façon à ces données, et je connais la distribution), alors j'ai jeté un coup d'œil au public (pour certaines valeurs sélectionnées), mais à la fin je suis parti pour l'un des trois modèles un beau seuil d'arrondi de 0,0005, et pour le second 0,0004 théorique.

Le réglage par le haut a été plus facile, des valeurs supérieures à 0,95 à payer en 0,95, 0,95 a été effectué sur la base de la part maximale des données de test utilisées avec unavec la plus grande marge (maximum 0,93 dans le train), cet ajustement n'a pratiquement pas eu d'effet sur le public (les départs uniques sont apparemment dans le public), il a été laissé exclusivement pour la sécurité en privé. Et une correction liée aux zéros a été ajoutée, si la prédiction est nulle au premier scan, alors malgré les prédictions des modèles aux deuxième et troisième scan, leurs prédictions vont aussi à 0, cela n'a pas beaucoup affecté, quelque part le deuxième signe (le modèle est pratiquement toujours et donc lui-même (moins que le précédent et à zéro) l'a fait), mais est parti pour la sécurité en privé.

résultats


Les résultats étaient très dépendants du type de réponse et des prédicteurs sélectionnés, par exemple, même si vous aviez prédit des fractions, ou même mieux que leur logarithme, vous pouviez sélectionner d'autres prédicteurs et le résultat serait d'environ 16%, et si vous allez à des valeurs absolues et aussi resélectionnez des prédicteurs, puis tout a commencé à environ 15%, donc c'était ma ligne de base.

Et d'ailleurs, ces résultats étaient déjà suffisants pour rester dans le top cinq, mais c'était intéressant de «booster» davantage.

Et alors, qu'est-ce qui a considérablement amélioré ces 15%?

En général, seulement l'ajout d'heures, seulement les heures (heures de début et de fin) a immédiatement donné 13,97%, les changer en sinus cosinus s'est amélioré à 13,44%, puis l'amélioration à 13,25% arrondissait les petites valeurs à zéro, et la moyenne géométrique la moyenne des deux modèles, c'est-à-dire qu'elle était déjà plus tuning pour le test (public), et pour cette raison, j'ai quand même eu un peu trop de plaisir avec le public.

Dans ce concours, il a fallu choisir une solution. Maintenant, en regardant dans la LC, je vois que ma solution choisie s'est également avérée être la meilleure en privé (l'endroit n'a pas changé) (la meilleure privat est inférieure à 0,02 point de pourcentage), mais si vous prenez des envois dans lesquels la réponse n'était pas si arrondie, puis en privé ils étaient légèrement pires - 13,6%, c'est-à-dire qu'il n'y avait pas de recyclage solide pour le public, mais ce post-réglage n'a pas joué un rôle très important non plus.

En conséquence, le principal succès de la réserve: les prédicteurs sélectionnés sous un modèle de réponse cubiste sélectionné , les modèles en cascade (1-> 2-> 3) et les prédicteurs s e temporels ( sin , cos ).

Conclusion


Malgré le fait que les gagnants des cinq premières places ont utilisé divers modèles, y compris des modèles modernes (1 place - SVR , 2 place - catboost , 3 place - neural net , 5 place - lightgbm , bien que ces gagnants aient eu des prédicteurs beaucoup plus complexes) , J'ai pris la 4e place en utilisant l'un des modèles classiques les plus anciens de 1992 (même les idées SVR sont apparues plus tard) sur des prédicteurs assez simples et évidents, ce qui confirme une fois de plus: il n'est pas toujours suffisant de fonctionner sur des prédicteurs générés (ces approches étaient beaucoup plus faibles dans la note finale, environ 20%), le bon sens des prédicteurs, la transformation de la réponse et le choix de la fonction de perte dans les modèles (le cas échéant) jouent ici un rôle important.

En général, le concours s'est avéré intéressant et créatif, avec des conclusions pertinentes.

J'espère qu'à l'étape finale (à plein temps) de la compétition, la tâche n'en sera pas moins intéressante.

All Articles