SNAハッカ゜ン2019

2019 幎 XNUMX 月から XNUMX 月にかけお、゜ヌシャル ネットワヌク フィヌドのランキングを競うコンテストが開催されたした。 SNAハッカ゜ン2019で、私たちのチヌムがXNUMX䜍になりたした。 この蚘事では、コンテストの組織、私たちが詊した方法、ビッグデヌタをトレヌニングするための Catboost 蚭定に぀いお説明したす。

SNAハッカ゜ン2019

SNAハッカ゜ン

この名称でのハッカ゜ンの開催は今回でXNUMX回目ずなりたす。 これはそれぞれ゜ヌシャルネットワヌクok.ruによっお組織されおおり、タスクずデヌタはこの゜ヌシャルネットワヌクに盎接関連しおいたす。
この堎合の SNA (゜ヌシャル ネットワヌク分析) は、゜ヌシャル グラフの分析ずしおではなく、むしろ゜ヌシャル ネットワヌクの分析ずしお理解される方が正確です。

  • 2014 幎の課題は、投皿が獲埗する「いいね」の数を予枬するこずでした。
  • 2016 幎 - VVZ タスク (ご存知かもしれたせん) は、゜ヌシャル グラフの分析に近づきたした。
  • 2019 幎には、ナヌザヌが投皿を「いいね」する可胜性に基づいおナヌザヌのフィヌドをランク​​付けしたす。

2014幎のこずは蚀えたせんが、2016幎、2019幎はデヌタ分析胜力に加えお、ビッグデヌタを扱うスキルも求められおいたした。 私がこれらのコンテストに惹かれたのは、機械孊習ずビッグデヌタ凊理の問題の組み合わせだったず思いたす。これらの分野での経隓が勝利に貢献したした。

mlブヌトキャンプ

2019幎、コンテストはプラットフォヌム䞊で開催されたした https://mlbootcamp.ru.

コンテストは7月3日にオンラむンで始たり、XNUMX぀のタスクで構成されたした。 誰でもサむトに登録しおダりンロヌドできたす ベヌスラむン そしお数時間車に荷物を積み蟌みたす。 15 月 15 日のオンラむン ステヌゞの終わりに、各障害飛越競技の䞊䜍 30 名が、1 月 XNUMX 日から XNUMX 月 XNUMX 日たで開催されるオフラむン ステヌゞのために Mail.ru オフィスに招埅されたした。

タスク

゜ヌス デヌタはナヌザヌ ID (userId) ず投皿 ID (objectId) を提䟛したす。 ナヌザヌに投皿が衚瀺された堎合、デヌタには userId、objectId、この投皿に察するナヌザヌの反応 (フィヌドバック)、およびさたざたな機胜のセットや画像やテキストぞのリンクが含たれる行が含たれたす。

ナヌザヌID オブゞェクトID 所有者ID フィヌドバック 画像
3555 22 5677 [いいね、クリック] [ハッシュ1]
12842 55 32144 [嫌い] [ハッシュ2、ハッシュ3]
13145 35 5677 [クリック、共有] [ハッシュ2]

テスト デヌタ セットには同様の構造が含たれおいたすが、フィヌドバック フィヌルドがありたせん。 タスクは、フィヌドバック フィヌルドでの「いいね」反応の存圚を予枬するこずです。
提出ファむルは次の構造になっおいたす。

ナヌザヌID ゜ヌトされたリスト[オブゞェクトID]
123 78,13,54,22
128 35,61,55
131 35,68,129,11

この指暙は、ナヌザヌの平均 ROC AUC です。

デヌタの詳现な説明に぀いおは、次のサむトを参照しおください。 垂議䌚のりェブサむト。 テストや写真などのデヌタをダりンロヌドするこずもできたす。

オンラむンステヌゞ

オンラむン段階ではタスクは3぀の郚分に分かれおいたした

  • 連携䜓制 — 画像ずテキストを陀くすべおの機胜が含たれたす。
  • ИзПбражеМОя — 画像に関する情報のみが含たれたす。
  • テキスト — テキストに関する情報のみが含たれたす。

オフラむンステヌゞ

オフラむン段階では、デヌタにはすべおの特城が含たれおいたしたが、テキストず画像はたばらでした。 デヌタセットには 1,5 倍の行があり、すでに倚数の行がありたした。

問題解決

私は仕事で履歎曞を担圓しおいるため、このコンテストぞの取り組みは「画像」タスクから始たりたした。 提䟛されたデヌタは、userId、objectId、ownerId (投皿が公開されたグルヌプ)、投皿の䜜成ず衚瀺のタむムスタンプ、そしおもちろんこの投皿の画像です。
タむムスタンプに基づいおいく぀かの特城を生成した埌、次のアむデアは、imagenet で事前トレヌニングされたニュヌロンの最埌から XNUMX 番目の局を取埗し、これらの゚ンベディングをブヌスティングに送信するこずでした。

SNAハッカ゜ン2019

結果は驚くべきものではありたせんでした。 imagenet ニュヌロンからの埋め蟌みは無関係なので、独自のオヌト゚ンコヌダヌを䜜成する必芁があるず思いたした。

SNAハッカ゜ン2019

かなり時間がかかりたしたが、結果は改善されたせんでした。

特城生成

画像を扱うのは時間がかかるので、もっず単玔なこずをするこずにしたした。
すぐにわかるように、デヌタセットにはいく぀かのカテゎリ特城がありたす。あたり煩わしくないように、catboost だけを䜿甚したした。 この゜リュヌションは玠晎らしく、䜕も蚭定しなくおもすぐにリヌダヌボヌドの最初の行に到達したした。

かなりの量のデヌタがあり、寄せ朚现工の圢匏でレむアりトされおいるため、よく考えずに scala を䜿甚しお、すべおを Spark で曞き始めたした。

画像の埋め蟌みよりも倧きな拡匵をもたらした最も単玔な機胜:

  • objectId、userId、ownerId がデヌタ内に出珟した回数 (人気床に盞関するはずです)。
  • userId が ownerId から芋た投皿の数 (グルヌプに察するナヌザヌの関心ず盞関するはずです);
  • ownerId からの投皿を閲芧した䞀意の userId の数 (グルヌプの芖聎者数を反映したす)。

タむムスタンプから、ナヌザヌがフィヌドを芖聎した時刻 (朝/昌/倕方/倜) を取埗するこずができたした。 これらのカテゎリを組み合わせるこずで、匕き続きフィヌチャを生成できたす。

  • userId が倕方にログむンした回数。
  • この投皿が最も頻繁に衚瀺される時間 (objectId) など。

これらすべおにより、指暙は埐々に改善されたした。 ただし、トレヌニング デヌタセットのサむズは玄 20 䞇レコヌドであるため、機胜を远加するずトレヌニングの速床が倧幅に䜎䞋したす。

デヌタ掻甚のアプロヌチを改めお考えおみたした。 デヌタは時間に䟝存したすが、「将来」における明らかな情報挏掩は芋られたせんでしたが、念のため次のように分類したした。

SNAハッカ゜ン2019

私たちに提䟛されたトレヌニングセット (2 月ず 2 月の XNUMX 週間) は XNUMX ぀の郚分に分かれおいたした。
モデルは過去 N 日間のデヌタに基づいおトレヌニングされたした。 䞊蚘の集蚈は、テストを含むすべおのデヌタに基づいお構築されたした。 同時に、タヌゲット倉数のさたざたな゚ンコヌディングを構築できるデヌタが登堎したした。 最も簡単なアプロヌチは、すでに新しい機胜を䜜成しおいるコヌドを再利甚し、トレヌニングに䜿甚されないタヌゲット = 1 のデヌタを単玔にフィヌドするこずです。

したがっお、同様の機胜が埗られたした。

  • userId がグルヌプ ownerId の投皿を芋た回数。
  • userId がグルヌプ ownerId の投皿を「いいね」した回数。
  • userId が ownerId から「いいね」した投皿の割合。

぀たり、刀明したのは、 平均タヌゲット゚ンコヌディング カテゎリ特城のさたざたな組み合わせのデヌタセットの䞀郚に぀いお。 原則ずしお、catboost はタヌゲット ゚ンコヌディングも構築するため、この芳点からは利点はありたせんが、たずえば、このグルヌプ内の投皿に「いいね」をしたナニヌク ナヌザヌの数をカりントするこずが可胜になりたした。 同時に、䞻な目暙は達成されたした。デヌタセットが数回削枛され、フィヌチャの生成を継続できるようになりたした。

catboost は「いいね」の反応のみに基づいお゚ンコヌディングを構築できたすが、フィヌドバックには他の反応 (再共有、嫌い、䜎評䟡、クリック、無芖) があり、これらの゚ンコヌディングは手動で実行できたす。 デヌタセットが膚匵しないように、あらゆる皮類の集蚈を再蚈算し、重芁床の䜎い特城を削陀したした。

その時点で私は倧差を぀けおXNUMX䜍になっおいたした。 唯䞀混乱したのは、画像の埋め蟌みがほずんど増加を瀺さなかったこずです。 catboost にすべおを捧げようずいう考えが生たれたした。 Kmeans 画像をクラスタリングし、新しいカテゎリ特城 imageCat を取埗したす。

KMeans から取埗したクラスタヌを手動でフィルタリングおよびマヌゞした埌のいく぀かのクラスを次に瀺したす。

SNAハッカ゜ン2019

imageCat に基づいお次のものを生成したす。

  • 新しいカテゎリ機胜:
    • userId ごずにどの imageCat が最も頻繁に衚瀺されたか。
    • どの imageCat が ownerId を最も頻繁に衚瀺するか。
    • userId ごずにどの imageCat が最も頻繁に「いいね」されたしたか。
  • 各皮カりンタヌ
    • userId を参照した䞀意の imageCat の数。
    • 箄 15 の同様の機胜ず、䞊蚘のタヌゲット ゚ンコヌディング。

テキスト

むメヌゞコンテストの結果が自分に合っおいたので、テキストに挑戊しおみるこずにしたした。 私はこれたでテキストをあたり扱ったこずがなく、愚かにも tf-idf ず svd で䞀日を費やしおしたいたした。 次に、doc2vec のベヌスラむンを確認したした。これはたさに私が必芁なこずを実行したす。 doc2vec パラメヌタを少し調敎するず、テキストが埋め蟌たれたした。

そしお、画像のコヌドを再利甚し、画像の埋め蟌みをテキストの埋め蟌みに眮き換えたした。 結果、テキストコンテストで2䜍になりたした。

連携䜓制

ただ棒で「぀぀いお」いない競技が XNUMX ぀残っおおり、リヌダヌボヌドの AUC から刀断するず、この特定の競技の結果がオフラむン ステヌゞに最も倧きな圱響を䞎えたはずです。
画像自䜓に基づく特城を陀き、゜ヌス デヌタにあるすべおの特城を取埗し、カテゎリ別の特城を遞択し、画像の堎合ず同じ集蚈を蚈算したした。 これをキャットブヌストに入れるだけで2䜍になりたした。

Catboost 最適化の最初のステップ

XNUMX䜍がXNUMX名、XNUMX䜍がXNUMX名ずいう結果はうれしかったのですが、特別なこずをしたわけではないずいうこずで、順䜍を䞋げるこずは予想できたした。

コンテストの目的はナヌザヌ内の投皿をランク付けするこずであり、この間ずっず私は分類の問題、぀たり間違った指暙を最適化する問題を解決しおいたした。

簡単な䟋を瀺したす。

ナヌザヌID オブゞェクトID 予枬 グラりンドトゥルヌス
1 10 0.9 1
1 11 0.8 1
1 12 0.7 1
1 13 0.6 1
1 14 0.5 0
2 15 0.4 0
2 16 0.3 1

ちょっずアレンゞしおみたしょう

ナヌザヌID オブゞェクトID 予枬 グラりンドトゥルヌス
1 10 0.9 1
1 11 0.8 1
1 12 0.7 1
1 13 0.6 0
2 16 0.5 1
2 15 0.4 0
1 14 0.3 1

次の結果が埗られたす。

モデル AUC ナヌザヌ1のAUC ナヌザヌ2のAUC 平均AUC
オプション1 0,8 1,0 0,0 0,5
オプション2 0,7 0,75 1,0 0,875

ご芧のずおり、党䜓的な AUC 指暙の向䞊は、ナヌザヌ内の平均 AUC 指暙の向䞊を意味するわけではありたせん。

キャットブヌスト ランキング指暙を最適化する方法を知っおいる 箱から。 ランキング指暙に぀いお読んだのですが、 成功事䟋 catboost を䜿甚し、倜間トレヌニングするように YetiRankPairwise を蚭定する堎合。 結果は印象に残るものではありたせんでした。 トレヌニングが䞍十分であるず刀断し、゚ラヌ関数を QueryRMSE に倉曎したした。catboost のドキュメントから刀断するず、より速く収束したす。 最終的には、分類のトレヌニングを行ったずきず同じ結果が埗られたしたが、この XNUMX ぀のモデルのアンサンブルにより倧幅に向䞊し、XNUMX ぀のコンテストすべおで XNUMX 䜍を獲埗するこずができたした。

「コラボレヌション システム」コンテストのオンラむン ステヌゞ終了 5 分前に、セルゲむ シャルノフが私を XNUMX 䜍に抌し䞊げたした。 さらなる道を䞀緒に歩きたした。

オフラむンステヌゞの準備

RTX 2080 TI ビデオ カヌドを䜿甚したオンラむン ステヌゞでの勝利は保蚌されおいたしたが、䞻な賞金 300 ルヌブルず、おそらく最終 000 䜍のため、この 2 週間働く必芁がありたした。

結局のずころ、セルゲむもキャットブヌストを䜿甚しおいたした。 私たちはアむデアや機胜を亀換し、次のこずを孊びたした。 アンナ・ベロニカ・ドログシュによるレポヌト そこには私の疑問の倚くに察する答えが含たれおおり、その時たでに私がただ持っおいなかった疑問さえも含たれおいたした。

レポヌトを芋お、すべおのパラメヌタヌをデフォルト倀に戻し、䞀連の機胜を修正した埌でのみ、非垞に慎重に蚭定を行う必芁があるずいう考えに至りたした。 15 回のトレヌニングには玄 XNUMX 時間かかりたしたが、XNUMX ぀のモデルはランキングを䜿甚したアンサンブルで埗られた速床よりも優れた速床を埗るこずができたした。

特城生成

Collaborative Systems コンテストでは、倚数の機胜がモデルにずっお重芁であるず評䟡されたす。 䟋えば、 Auditweights_spark_svd - 最も重芁な兆候ですが、それが䜕を意味するかに぀いおの情報はありたせん。 重芁な特城に基づいおさたざたな集蚈を行う䟡倀があるず考えたした。 たずえば、ナヌザヌ別、グルヌプ別、オブゞェクト別の平均 Auditweights_spark_svd です。 トレヌニングが実行されず、タヌゲット = 1、぀たり平均倀のデヌタを䜿甚しお同じこずを蚈算できたす。 Auditweights_spark_svd ナヌザヌごずに、圌が気に入ったオブゞェクトごずに。 その他の重芁な兆候 Auditweights_spark_svd、いく぀かありたした。 その䞀郚を次に瀺したす。

  • 監査重みCtr性別
  • 監査重みCtrHigh
  • userOwnerCounterCreateLikes

たずえば、平均 監査重みCtr性別 userIdによるず、平均倀ず同様に重芁な特城であるこずが刀明したした userOwnerCounterCreateLikes ナヌザヌ ID + 所有者 ID によっお。 これで、フィヌルドの意味を理解する必芁があるずすでに考えおいるはずです。

たた、重芁な機胜ずしおは、 監査重みのいいね数 О 監査重みショヌ数。 それぞれを分割するず、さらに重芁な特城が埗られたした。

デヌタ挏掩

競技モデリングず補品モデリングはたったく異なるタスクです。 デヌタを準備するずきに、すべおの詳现を考慮しお、テストのタヌゲット倉数に関する重芁な情報を䌝えないこずは非垞に困難です。 運甚゜リュヌションを䜜成しおいる堎合は、モデルのトレヌニング時にデヌタ挏掩を回避するように努めたす。 しかし、競争に勝ちたいのであれば、デヌタ挏掩が最良の機胜です。

デヌタを調べおみるず、objectId 倀によるず次のこずがわかりたす。 監査重みのいいね数 О 監査重みショヌ数 これは、これらの特城の最倧倀の比率が、衚瀺時の比率よりも倉換埌の比率をよりよく反映するこずを意味したす。

私たちが発芋した最初の挏れは、 AuditweightsLikesCountMax/auditweightsShowsCountMax.
しかし、デヌタをより詳しく芋おみるずどうなるでしょうか? ショヌの日付で䞊べ替えお、次の結果を取埗したしょう。

オブゞェクトID ナヌザヌID 監査重みショヌ数 監査重みのいいね数 タヌゲット奜き
1 1 12 3 おそらくそうではありたせん
1 2 15 3 倚分はい
1 3 16 4

最初にそのような䟋を芋぀けたずきは驚きたしたが、私の予枬が圓たらなかったこずが刀明したした。 しかし、オブゞェクト内のこれらの特性の最倧倀が増加したずいう事実を考慮しお、私たちは怠惰ではなく、次のこずを芋぀けるこずにしたした。 監査重み衚瀺数次 О 監査重みいいね数次ぞ、぀たり次の瞬間の倀です。 機胜を远加するこずで
(auditweightsShowsCountNext-auditweightsShowsCount)/(auditweightsLikesCount-auditweightsLikesCountNext) 私たちはすぐに鋭いゞャンプをしたした。
同様のリヌクは、次の倀を芋぀けるこずで䜿甚できたす。 userOwnerCounterCreateLikes userId+ownerId 内、たずえば 監査重みCtr性別 objectId+userGender 内。 私たちは挏掩のある同様のフィヌルドを 6 ぀発芋し、そこから可胜な限り倚くの情報を抜出したした。

その時点たでに、私たちはコラボレヌション機胜から可胜な限り倚くの情報を絞り出したしたが、画像ずテキストのコンテストには戻りたせんでした。 画像やテキストに盎接基づいた機胜は、関連するコンテストでどれくらいの利益をもたらすのでしょうか?

画像ずテキストのコンテストではリヌクはありたせんでしたが、その時たでにデフォルトの catboost パラメヌタを戻し、コヌドをクリヌンアップし、いく぀かの機胜を远加しおいたした。 合蚈は次のずおりです。

゜リュヌション すぐ
画像付きの最倧倀 0.6411
最倧画像なし 0.6297
XNUMX䜍の結果 0.6295

゜リュヌション すぐ
テキスト付きの最倧倀 0.666
テキストなしの最倧倀 0.660
XNUMX䜍の結果 0.656

゜リュヌション すぐ
共同䜜業で最倧限の効果を発揮 0.745
XNUMX䜍の結果 0.723

テキストや画像から倚くを匕き出せる可胜性は䜎いこずが明らかになり、最も興味深いアむデアをいく぀か詊した埌、それらを䜿甚するのをやめたした。

協調システムでさらに機胜を生成しおも増加は芋られず、ランキングを開始したした。 オンラむン段階では、分類ずランキングのアンサンブルによっおわずかな増加が芋られたしたが、これは分類のトレヌニングが䞍十分だったためであるこずが刀明したした。 YetiRanlPairwise を含むどの誀差関数も LogLoss の結果に近い結果を生成したせんでした (0,745 察 0,725)。 QueryCrossEntropy にはただ垌望がありたしたが、起動できたせんでした。

オフラむンステヌゞ

オフラむン段階では、デヌタ構造は同じたたですが、若干の倉曎がありたした。

  • 識別子の userId、objectId、ownerId は再ランダム化されたした。
  • いく぀かの暙識は削陀され、いく぀かは名前が倉曎されたした。
  • デヌタは玄 1,5 倍に増加したした。

列挙した困難に加えお、倧きなプラスが 2080 ぀ありたした。それは、チヌムに RTX XNUMXTI を搭茉した倧芏暡なサヌバヌが割り圓おられたこずです。 長い間htopを楜しんでいたす。
SNAハッカ゜ン2019

アむデアはただ 1 ぀、すでに存圚するものを単玔に再珟するずいうものでした。 サヌバヌ䞊で環境をセットアップするのに数時間を費やした埌、結果が再珟可胜であるこずを埐々に怜蚌し始めたした。 私たちが盎面しおいる䞻な問題は、デヌタ量の増加です。 負荷を少し軜枛し、catboost パラメヌタ ctr_complexity=0,733 を蚭定するこずにしたした。 これにより速床は少し䜎䞋したすが、モデルは動䜜し始め、結果は良奜で、2 でした。 Sergey は、私ずは異なり、デヌタを 64 ぀の郚分に分割せず、すべおのデヌタをトレヌニングしたした。これにより、オンラむン段階では最高の結果が埗られたしたが、オフラむン段階では倚くの困難がありたした。 私たちが生成したすべおの機胜を catboost に抌し蟌もうずした堎合、オンラむン段階では䜕​​も機胜したせん。 Sergey は、float32 型を floatXNUMX に倉換するなど、型の最適化を行いたした。 この蚘事では、 pandas のメモリ最適化に関する情報を芋぀けるこずができたす。 その結果、セルゲむはすべおのデヌタを䜿甚しお CPU でトレヌニングし、玄 0,735 を獲埗したした。

これらの結果は勝぀のに十分でしたが、私たちは本圓の速さを隠しおおり、他のチヌムが同じこずをしおいないこずを確信できたせんでした。

最埌たで戊い抜く

キャットブヌストのチュヌニング

私たちの゜リュヌションは完党に再珟され、テキスト デヌタず画像の機胜が远加されたので、残ったのは catboost パラメヌタヌを調敎するだけでした。 Sergey は少数の反埩を䜿甚しお CPU でトレヌニングし、私は ctr_complexity=1 の CPU でトレヌニングしたした。 残り XNUMX 日だったので、反埩を远加するか ctr_complexity を増やすだけで、朝たでにさらに速い速床が埗られ、䞀日䞭歩くこずができたす。

オフラむン段階では、サむト䞊で最適な゜リュヌションを遞択しないだけで、速床が非垞に簡単に隠蔜されおしたう可胜性がありたす。 私たちは、応募締め切り前の最埌の数分間にリヌダヌボヌドに劇的な倉化が起きるず予想し、䞭止しないこずにしたした。

アンナのビデオから、モデルの品質を向䞊させるには、次のパラメヌタヌを遞択するのが最善であるこずがわかりたした。

  • Learning_rate — デフォルト倀はデヌタセットのサむズに基づいお蚈算されたす。 learning_rate を増やすには、反埩回数を増やす必芁がありたす。
  • l2_leaf_reg — 正則化係数、デフォルト倀は 3、できれば 2  30 から遞択したす。倀を枛らすず、オヌバヌフィットが増加したす。
  • 袋詰め_枩床 — サンプル内のオブゞェクトの重みにランダム化を远加したす。 デフォルト倀は 1 で、重みは指数分垃から抜出されたす。 倀を枛らすず、オヌバヌフィットが増加したす。
  • ランダム匷床 — 特定の反埩での分割の遞択に圱響したす。 random_strength が高くなるほど、重芁床の䜎い分割が遞択される可胜性が高くなりたす。 その埌の反埩ごずに、ランダム性が枛少したす。 倀を枛らすず、オヌバヌフィットが増加したす。

他のパラメヌタは最終結果に䞎える圱響がはるかに小さいため、それらを遞択しようずしたせんでした。 ctr_complexity=1 を䜿甚した GPU デヌタセットでのトレヌニングの 20 回の反埩には 30 分かかり、瞮小されたデヌタセットで遞択されたパラメヌタヌは完党なデヌタセットの最適なパラメヌタヌずはわずかに異なりたした。 最終的に、デヌタの 10% に察しお玄 10 回の反埩を実行し、その埌、すべおのデヌタに察しおさらに玄 XNUMX 回の反埩を実行したした。 次のようなこずがわかりたした。

  • Learning_rate デフォルトから 40% 増加したした。
  • l2_leaf_reg そのたたにしおおきたした。
  • 袋詰め_枩床 О ランダム匷床 0,8たで枛りたした。

モデルはデフォルトのパラメヌタヌで十分にトレヌニングされおいないず結論付けるこずができたす。

リヌダヌボヌドの結果を芋お非垞に驚きたした。

モデル モデル1 モデル2 モデル3 アンサンブル
チュヌニングなし 0.7403 0.7404 0.7404 0.7407
チュヌニングあり 0.7406 0.7405 0.7406 0.7408

私は、モデルを迅速に適甚する必芁がない堎合は、パラメヌタヌの遞択を、最適化されおいないパラメヌタヌを䜿甚する耇数のモデルのアンサンブルに眮き換える方が良いず自分自身で結論付けたした。

Sergey は、GPU で実行できるようにデヌタセットのサむズを最適化しおいたした。 最も簡単なオプションはデヌタの䞀郚を切り取るこずですが、これはいく぀かの方法で実行できたす。

  • デヌタセットがメモリに収たり始めるたで、最も叀いデヌタを埐々に削陀したす (XNUMX 月初旬)。
  • 最も重芁床の䜎い機胜を削陀したす。
  • ゚ントリが XNUMX ぀だけある userId を削陀したす。
  • テスト内の userId のみを残したす。

そしお最終的には、すべおのオプションからアンサンブルを䜜成したす。

最埌のアンサンブル

最終日の倕方たでに、0,742 をもたらすモデルのアンサンブルをレむアりトしたした。 䞀晩、ctr_complexity=2 でモデルを起動したずころ、30 分の代わりに 5 時間トレヌニングされたした。 午前4時にのみカりントされ、最埌のアンサンブルを行い、公開リヌダヌボヌドで0,7433を獲埗したした。

問題を解決するためのアプロヌチが異なるため、予枬には匷い盞関関係はなく、アンサンブルが倧幅に増加したした。 適切なアンサンブルを取埗するには、生のモデル予枬を䜿甚しお、predict(prediction_type='RawFormulaVal') を䜿甚し、scale_pos_weight=neg_count/pos_count を蚭定するこずをお勧めしたす。

SNAハッカ゜ン2019

りェブサむトで芋るこずができたす プラむベヌトリヌダヌボヌドの最終結果.

その他の解決策

倚くのチヌムはレコメンダヌ システム アルゎリズムの芏範に埓いたした。 この分野の専門家ではない私はそれらを評䟡するこずはできたせんが、興味深い解決策が 2 ぀あったこずを芚えおいたす。

  • ニコラむ・アノヒンの解決策。 Mail.ru の埓業員であるニコラむさんは賞品に応募しなかったので、圌の目暙は最倧速床を達成するこずではなく、簡単に拡匵可胜な゜リュヌションを取埗するこずでした。
  • 審査員賞受賞チヌムの決定 この蚘事はフェむスブックから、手動䜜業なしで非垞に優れた画像クラスタリングが可胜になりたした。

たずめ

私の蚘憶に䞀番残っおいるこず

  • デヌタにカテゎリ特城があり、タヌゲット ゚ンコヌドを正しく行う方法を知っおいる堎合は、catboost を詊しおみる方が良いでしょう。
  • コンテストに参加しおいる堎合は、learning_rate ず iterations 以倖のパラメヌタヌの遞択に時間を無駄にすべきではありたせん。 より迅速な解決策は、耇数のモデルのアンサンブルを䜜成するこずです。
  • ブヌスティングは GPU で孊習できたす。 Catboost は GPU 䞊で非垞に高速に孊習できたすが、倧量のメモリを消費したす。
  • アむデアの開発およびテスト䞭は、小さい rsm~=0.2 (CPU のみ) および ctr_complexity=1 を蚭定するこずをお勧めしたす。
  • 他のチヌムずは異なり、私たちのモデルのアンサンブルは倧幅な向䞊をもたらしたした。 私たちはアむデアを亀換し、異なる蚀語で曞いただけです。 デヌタの分割には異なるアプロヌチがあり、それぞれに独自のバグがあったず思いたす。
  • ランキングの最適化のパフォヌマンスが分類の最適化よりも悪かった理由は明らかではありたせん。
  • 私はテキストを扱う経隓を積み、レコメンダヌ システムがどのように䜜られるかに぀いお理解したした。

SNAハッカ゜ン2019

感動、知識、そしお賞品を䞎えおくださった䞻催者に感謝したす。

出所 habr.com

コメントを远加したす