Kaggleを「農場」する方法

画像
* 農場 -(英語の農業から)-特定の目的(経験の獲得、リソースの取得など)のための特定のゲームアクションの長く退屈な繰り返し。


はじめに


最近(10月1日)、 優れたDS / MLコースの新しいセッション開始さました(現在の呼び名であるように、DSを初期コースとして「入力」したい人を強くお勧めします)。 そして、いつものように、コースを修了した後、卒業生には疑問があります-まだ生の理論的知識を統合するために、どこで実際の経験を得るべきか。 プロフィールフォーラムでこの質問をすると、答えはおそらく1つになります。Kaggleを解決してください。 Kaggleはイエスですが、どこから始めて、実用的なスキルを得るためにこのプラットフォームを最も効果的に使用するか? この記事では、著者は自分の経験でこれらの質問に答えるとともに、競争力のあるDSの分野での主なレーキの位置を説明して、ポンピングプロセスを高速化し、ファンを獲得します。


作成者からのコースに関するいくつかの言葉:


mlcourse.aiコースは、OpenDataScienceコミュニティの大規模なアクティビティの1つです。 @yorkoと会社(〜60人)は、クールなスキルが大学の外で、さらには完全に無料で得られることを実証しています。 コースの主なアイデアは、理論と実践の最適な組み合わせです。 一方で、基本的な概念の提示は数学なしでは行われませんが、一方で、宿題の多く、Kaggle Inclassのコンテストやプロジェクトは、エネルギーの一定の投資で、優れた機械学習スキルを提供します。 コースの競争的性質に注意することは不可能です-学生の一般的な評価が実施されており、それが強く動機付けられています。 このコースは、本当に活気のあるコミュニティで行われるという点でも異なります。


コースの一環として、2つのKaggle Inclassコンテストがあります。 どちらも非常に興味深いもので、標識の作成に適しています。 最初は訪問されたサイトの系列によるユーザ識別です。 2つ目は、メディア上の記事の人気の予測です 主な利点は、2つの宿題から得られることです。そこでは、賢く、これらの競技会のベースラインを破る必要があります。


コースとその作成者に敬意を表して、私たちは物語を続けます...


私は1年半前に自分自身を覚えています。 アンドリューNgからのコース(まだ最初のバージョン)が完了し、モスクワ物理学技術研究所からの専門化が完了し 、書籍の山が読まれました-理論の頭は知識に満ちていますが、基本的な戦闘タスクを解決しようとすると、st迷が生じます。 いいえ、問題を解決する方法-適用するアルゴリズムは明らかです-も理解できますが、sklearn / pandasヘルプが毎分アクセスするなど、コードを書くのは非常に困難です その理由-パイプラインが蓄積されておらず、「指先で」コードの感覚があります。


これは機能しないと著者は考え、Kaggleに行きました。 戦闘競技からすぐに始めるのは怖かったです。そして、入門競技「 ハウス価格:高度な回帰技術 」が最初の兆候となり、この記事で説明されている効果的なポンピングへのアプローチを形成しました。


後で説明するものでは、ノウハウはなく、すべての手法、方法、および手法は明白で予測可能ですが、これはそれらの有効性を損なうものではありません。 少なくとも、彼らに続いて、著者はKaggleコンペティションマスターを6か月間、ソロモードで3つのコンペティションで死ぬことに成功し、この記事の執筆時点で、Kaggleワールドレーティングのトップ200に入りました。 ところで、これは著者がこの種の記事を書く勇気さえ自分に与えた理由についての質問に答えます。


一言で言えば、Kaggleとは


画像
Kaggleは、データサイエンスのコンテストを開催するための最も有名なプラットフォームの1つです。各コンテストでは、主催者が問題の説明、この問題を解決するためのデータ、ソリューションの評価基準、および期限と賞品をアップロードします。 参加者には、1日あたり3〜5回(主催者の意向により)の「送信」(独自のソリューションの送信)が試みられます。


データは、トレーニングサンプル(トレーニング)とテスト(テスト)に分けられます。 トレーニング部分では、ターゲット変数の値は既知ですが、テスト部分では不明です。 参加者のタスクは、データのトレーニング部分でトレーニングされ、テストで最大の結果をもたらすモデルを作成することです。


各参加者はテストサンプルの予測を行い、結果をKaggleに送信します。その後、ロボット(テストのターゲット変数を知っている)は送信された結果を評価し、リーダーボードに表示されます。


しかし、すべてがそれほど単純ではありません。テストデータは、特定の割合でパブリック(パブリック)とプライベート(プライベート)の部分に分割されます。 競技中、主催者が設定した指標に従って、送信された決定がデータの公開部分で評価され、リーダーボード(いわゆる公開リーダーボード)にレイアウトされます。これにより、参加者はモデルの品質を評価できます。 最終決定(通常は2-参加者の選択による)は、テストデータの非公開部分で評価され、結果は非公開リーダーボードに表示されます。これは、競技の終了後にのみ利用でき、実際には最終結果が評価され、賞品、バンズ、メダルが配布されます


したがって、競技中、参加者はテストデータの公開部分でモデルがどのように振る舞うのか(結果はすぐにわかりました)、情報のみが利用できます。 真空中の球形の馬の場合、データの私的部分の分布と統計が公衆と一致する場合-そうでない場合はすべてがうまくいきます-公の場でうまく機能したモデルは、私的部分で機能しない可能性があります、つまり、オーバーフィックス(再トレーニング)です。 そして、ここでは、専門用語で「フライング」と呼ばれるものが発生します。これは、選択したモデルが再訓練され、必要な精度を与えることができなかったために、公共の10新しいデータ。


画像


これを避ける方法は? このためには、まず、正しい検証スキームを構築する必要があります。これは、ほとんどすべてのDSコースの最初のレッスンで教えられています。 なぜなら モデルがこれまでに見たことのないデータの正しい予測を行うことができない場合-どんな複雑なニューラルネットワークを構築する場合でも、使用する高度な技術に関係なく-生産では、そのようなモデルは生産できません その結果は価値がありません。


Kaggleの各コンペティションごとに、メトリックの説明(および私たちにとって最も興味深い)のフォーラムとカーネルを含むデータのセクションがある個別のページが作成されます。


彼とKaggleフォーラムのフォーラムでは、人々がアイデアを書き、議論し、共有しています。 しかし、カーネルはすでにより興味深いものです。 実際、これは、Kaggleクラウドの競合データ(Amazonian AWS、GoogleのGCEなど)に直接アクセスする独自のコードを実行する機能です。限られたリソースが各カーネルに割り当てられるため、データが少ない場合は、それらを使用すると、Kaggle Webサイトのブラウザーから直接、コードを記述して実行し、結果を送信できます。 2年前に、KaggleはGoogleに買収されたため、この機能がGoogle Cloud Engineを「内部」で使用することは驚くことではありません。


さらに、いくつかのコンペティション(最近-Mercari )がありました。そこでは一般にカーネルを介してのみデータを操作できました。 非常に興味深い形式で、参加者間のハードウェアの違いを平準化し、コードとアプローチの最適化のために脳をオンにすることを強制します。これは、当然のことながら、その時点でカーネルは4コア/ 16 GB RAM / 60分間の厳しいリソース制限があったため/ 1 GBのスクラッチと出力ディスクスペース。 この競争に取り組んでいる間、著者は理論的なコースよりもニューラルネットワークの最適化について多くを学びました。 金だけでは十分ではなく、23日にソロを終えたが、かなりの経験と喜びを得た...


この機会に、 ods.aiの同僚であるアーサーステパネンコ(アーサー)コンスタンチンロプキン(コスティア)セルゲイフィロノフ(セルゲイフ)に、このコンテストでのアドバイスとサポートに感謝します。 一般に、 PawełJankiewiczで 1位になったKonstantin Lopukhin(kostia)は、多くの興味深い点があり、チャットルームで「 75行の標準的な屈辱 」と呼ばれるものレイアウトしました。リーダーボードのゴールデンゾーンに結果を出力する75行のコードのカーネルです。 これは、もちろん見なければなりません:)


さて、気が散るなど、人々はコードを書き、カーネルにソリューション、興味深いアイデアなどを配置します。 通常、各競争では、数週間後に、データセット、統計、特性などの詳細な説明とともに、1つまたは2つの優れたカーネルEDA(探索的データ分析)が表示されます。 もちろん、リーダーボードに最良の結果を表示しないベースライン(基本ソリューション)がいくつかありますが、独自のソリューションを作成するための出発点として使用できます。


なぜKaggleなのか?


画像


実際、どのプラットフォームでプレイする場合でも、Kaggleは最初で最も宣伝されたものの1つであり、優れたコミュニティと非常に快適な環境を備えています(安定性とパフォーマンスのためにカーネルを改良することを望みます。そうでなければ、多くの人がMercari )しかし、一般的に、プラットフォームは非常に便利で自給自足であり、そのサイコロはまだ高く評価されています。


競争力のあるDSのトピックに関する一般的な小さな余談。 非常に多くの場合、記事、会話、その他のコミュニケーションでは、考えはこれはすべてでたらめであり、競技の経験は実際のタスクとは無関係であり、そこの人々は狂気と離婚している小数点第5位の調整に従事しています現実。 この問題をもう少し詳しく見てみましょう。


学問や科学とは異なり、DSスペシャリストの実践として、私たちの仕事では、ビジネス上の問題を解決しなければなりません。 それは(ここにCRISP-DMへの参照があります)タスクを解決するために必要です:



このリストの最初の4つのポイントはどこにも教えられていません(そのようなコースが表示された場合は修正してください-ためらうことなく登録します)。ここでは、この業界で働く同僚の経験からしか学ぶことができません。 しかし、最後のポイント-モデルの選択から始めて、競技会に参加することができます。


どのコンテストでも、私たちの仕事のほとんどは主催者によって行われました。 説明したビジネス目標があり、近似メトリックが選択され、データが収集されました。そして、私たちのタスクは、このすべてのレゴから作業パイプラインを構築することです。 そして、ここではスキルが強化されます-パスの操作方法、ニューラルネットワークとツリーのデータの準備方法(およびニューラルネットワークが特別なアプローチを必要とする理由)、検証を正しく構築する方法、再訓練しない方法、ハイパーパラメーターの選択方法、方法.......十数個の「どのように」、その有能なパフォーマンスは、私たちの職業を通り抜ける人々から優秀な専門家を区別します。


Kaggleで「農場」できること


画像


基本的に、これは合理的であり、すべての新参者がKaggleに来て実践的な経験を獲得しますが、これに加えて少なくとも2つの目標があることを忘れないでください:



覚えておくべき主なことは、これらの3つの目標は完全に異なり、それらを達成するために異なるアプローチが必要であり、特に初期段階でそれらを混同しないでください!


ポンピングの際に「初期段階」で強調されるのは何の理由でもありません-これら3つの目標は1つに統合され、並行して解決されますが、開始している間は、 それらを混ぜないでください ! このようにして、この不公平な世界での痛み、失望、resみを避けることができます。


ボトムアップで目標を簡単に見てみましょう。



(*) パブリックカーネルカーネルブレンディング、パブリックリーダーボードで最大速度でレイアウトされたカーネルが選択され、その予測が平均化(ブレンド)され、結果が提出されるファームメダルテクニックです。 通常、この方法では、ハードオーバーフィット(トレーニングへの再トレーニング)およびプライベート飛行が行われますが、場合によっては、ほぼ銀色の服従を得ることができます。 著者は、初期段階では、同様のアプローチを推奨していません(ベルトとパンツについては以下をお読みください)。


最初の目標は、「経験」を選択し、同時に2つまたは3つの目標に取り組む準備ができたと感じる瞬間までそれを順守することです。


言及する価値のあるもう2つのポイントがあります(ウラジミール・イグロヴィコフ(テルナウス) -リマインダーをありがとう)。


1つ目は、Kaggleに投資した取り組みを、新しい、より興味深い、および/または高給の仕事場に転換することです。 Kaggleのサイコロをどのように平らにしたとしても、人々を理解するために、Kaggleコンペティションマスターの履歴書やその他の成果には価値があります。


この点を説明するために、同僚のセルゲイ・ムシンスキー(cepera_ang)アレクサンダー・ブスラエフ(albu)との2つのインタビュー( 1、2 )を引用できます。


また、 Valery Babushkinvenheads)の意見:


Valery Babushkin-X5 Retail Groupのデータサイエンスヘッド(現在のスタッフ数は30人+ 2019年から20人の空席)


Yandex Advisor分析グループの責任者


Kaggle Competition Masterは、将来のチームメンバーを評価するための優れたプロキシメトリックです。 もちろん、30人のチームと変装されていない機関車の形での最新のイベントに関連して、以前よりも少し徹底的なプロファイルの調査が必要ですが、これはまだ数分です。 高い確率でマスターの称号を獲得した人は、少なくとも中程度の品質のコードを書く方法を知っており、機械学習にかなり精通しており、データをクリーンアップし、安定したソリューションを構築する方法を知っています。 それでもマスターの舌を自慢できないなら、参加の事実もプラスです。少なくとも候補者はKaglの存在を知っており、怠けすぎず、マスターするのに時間を費やしていません。 そして、公開カーネル以外のものが起動され、結果のソリューションがその結果を超えた場合(検証は非常に簡単です)、これは技術的な詳細に関する詳細な議論の機会であり、古典的な理論の質問よりもはるかに優れており、興味深い答えです人が将来どのように仕事をするかについての理解が少ない。 DSの仕事はKaglのようなもので、根本的に間違っていると考える人がいるということを、私が恐れなければならない唯一のことです。 さらに多くの人がDS = MLと考えていますが、これも間違いです


2番目のポイントは、多くの問題の解決策をプレプリントまたは記事の形で組み立てることができることです。これにより、一方で、集団の心が競争中に生まれたという知識がフォーラムの荒野で死なないようにし、他方で著者のポートフォリオに別の行を追加します可視性への+1。いずれの場合も、キャリアと引用指数の両方にプラスの効果があります。


たとえば、いくつかのコンテストの結果に続く同僚の作品のリスト

著者(アルファベット順):


アンドレイ・O.、イリヤ、アルブ、アレクサルト、alex.radionov、almln、alxndrkalinin、cepera_ang、dautovri、davydov、fartuk、golovanov、ikibardin、kes、mpavlov、mvakhrushev、n01z3、rakhlin、rauf、resutut、sitator、sitator、sitator、sitator snikolenko、ternaus、twoleggedeye、vs、vicident、zfturbo


競技名
記事のタイトル
Dstl衛星画像機能の検出
深い畳み込みニューラルネットワークを使用した衛星画像の特徴検出:Kaggleの競合
カルバナイメージマスキングチャレンジ
TernausNet:画像セグメンテーションのためにImageNetで事前トレーニングされたVGG11エンコーダーを備えたU-Net
MICCAI2017:胃腸画像解析(GIANA)
深層畳み込みニューラルネットワークを使用した血管形成異常の検出と位置確認
MICCAI2017:ロボット機器セグメンテーション
深層学習を使用したロボット支援手術における自動器具セグメンテーション
DEEPGLOBE-CVPR18:道路抽出
衛星画像からの自動道路抽出のための完全な畳み込みネットワーク
DEEPGLOBE-CVPR18:建物の検出
Ternausnetv2:インスタンスのセグメンテーションのための完全な畳み込みネットワーク
DEEPGLOBE-CVPR18:土地被覆分類
マルチクラスの土地分割のための機能ピラミッドネットワーク
小児骨年齢の課題
深畳み込みニューラルネットワークを使用した小児の骨年齢の評価
IEEEの信号処理協会-カメラモデルの識別
畳み込みニューラルネットワークを使用したカメラモデルの識別
TensorFlow音声認識チャレンジ
簡単な音声コマンドを理解するための深層学習アプローチ
ICIAR2018-チャレンジ
乳がん組織学画像解析のための深い畳み込みニューラルネットワーク
糖尿病性網膜症の検出
深層学習分類フレームワークの統合による糖尿病網膜症の検出
DEEPGLOBE-CVPR18:土地被覆分類
U-NetおよびLovasz-Softmax損失を伴う衛星画像からの土地被覆分類
DEEPGLOBE-CVPR18:土地被覆分類
スーパーピクセルとジャカードインデックスの最適化後の土地被覆分類
DEEPGLOBE-CVPR18:建物の検出
複合損失関数を使用した衛星画像からの建物検出
MarinexploreおよびCornell Universityのクジラ検出チャレンジ
畳み込みニューラルネットワークによる北大西洋セミクジラの鳴き声検出
NIPS 2017:実行の学習
実行、スケルトン、実行:物理ベースのシミュレーションの骨格モデル
NIPS 2017:実行の学習
Learning to Runチャレンジソリューション:神経筋骨格環境向けの強化学習方法の適応
ImageNet大規模視覚認識チャレンジ2013(ILSVRC2013)
ImageNet分類の正則化手法とディープコンボリューショナルニューラルネットワークの比較
MS-Celeb-1M(2017)
顔表現学習のためのDoppelgangerマイニング
野生の偽装顔(DFW)2018
補助埋め込みを使用した難しい例のマイニング
Favorita食料品販売予測
Kaggleコンペティションの枠内でWaveNetを使用した売上予測

メダルを失う痛みを避ける方法


画像


得点する!


説明します。 ほぼすべての競争において、その終わりに近づき、リーダーボード全体を上にシフトするソリューションを備えたカーネルが公開されていますが、あなたにとっては、それに応じて決定を下します。 そして、フォーラムが痛みを始めるたびに 銀について決定したのはどうしてですか、そして今は青銅さえ引っ張っていません。 元気?


覚えておいてください-Kaggleは競争力のあるDSです。 あなたがいるリーダーボード上の場所はあなた次第です。 カーネルをレイアウトした人からではなく、星が集まったかどうかではなく、ソリューションにどれだけの労力を費やしたか、そしてそれを改善するためにあらゆる方法を使用したかどうかだけから。


公開カーネルがリーダーボード上のあなたの場所からあなたをノックアウトした場合-これはあなたの場所ではありません。

世界の不正から痛みを注ぐ代わりに、この男に感謝します。 真剣に、あなたよりも優れたソリューションを備えた公開カーネルは、パイプラインで何かを見逃したことを意味します。 正確に何を見つけ、パイプラインを改善し、同じ速度でハムスターの群衆を一周します。 覚えておいて、あなたの場所に戻るには、この一般の人より少しだけ良くなる必要があるだけです。


最初の大会では、この瞬間がどれほど動揺したか、私の手が落ちたのと同じくらい、ここであなたは銀色になりました-そしてあなたは...リーダーボードの下部にいます。 何も、あなたはただ集まって、どこで何を逃したかを理解する必要があります-あなたの決定をやり直して-場所に戻る。


さらに、この瞬間は、競争プロセスの初期段階にのみ存在します。 経験を積むほど、配置されたカーネルや星の影響を受けにくくなります。 最後の競争の1つ( トーキングデータ 、私たちのチームが8位になった )で、彼らもそのようなカーネルを投稿しましたが、彼はPavel Pleskov(ppleskov)からのチームチャットで1行だけを受け取りました悪化しただけです捨ててください 。」 つまり、このカーネルがデータからプルした有用な信号はすべて、すでにモデルによって引き出されています。


そして、メダルについて-覚えておいてください:


「装備のないベルトはズボンを維持するためにのみ必要です」(C)

どこで、何を、どのようにコードを書くか。


画像


ここでの推奨事項は、 ubuntuの下のjupyterノートブックでのPython 3.6です。 Pythonは長い間DSのデファクトスタンダードになりました。膨大な数のライブラリとコミュニティを考えると 、特にjupyter_contrib_nbextensionsを使用したjupyterは、ラピッドプロトタイピング、分析、データ処理に非常に便利であり、 ubuntuは単独で便利であり、さらにデータ処理の一部は簡単に実行できる場合がありますbashで :)


jupyter_contrib_nbextensionsを設定したら、すぐに有効にすることをお勧めします。



そして、あなたの人生はずっと楽になり、もっと楽しくなります。


パイプラインが多少安定したら、すぐにコードを別のモジュールに配置することをお勧めします。 私を信じて-あなたはそれを2回、または5回ではなく、複数回書き換えます。 しかし-これは正常です。


参加者がjupyterノートブックをできる限り使用ず、必要な場合にのみ、スクリプトを使用してパイプラインをすぐに作成しようとする場合、反対のアプローチがあります。 (このオプションの支持者は、たとえば(Vladimir Iglovikov(ternaus)


そして、 pypyterを何らかの種類のIDE( pycharmなど)と組み合わせようとしている人がいます。


それぞれのアプローチには命に対する権利があり、それぞれの長所と短所があり、「すべてのマーカーの味と色は異なる」と言われています。 快適なものを選択してください。


しかし、任意のオプションで、原則としてそれを取る


送信された各submit / OOFのコードを保存します(以下を参照)

(*) OOF-out of folds 、クロス検証を使用してデータセットのトレーニング部分のモデル予測を取得する手法。 アンサンブルで複数のソリューションをさらに組み立てるために不可欠です。 それはコースで再び教えられるか、簡単にグーグルです。


どうやって? さて、少なくとも3つのオプションがあります。



一般に、コミュニティでは、3番目のオプションに徐々に切り替える傾向があります。 1つ目と2つ目は欠点がありますが、シンプルで信頼性が高く、Kaggleにとっては十分です。


画像


はい、プログラマーでない人のためのpythonの詳細-それを恐れないでください。 あなたの仕事は、他の人のカーネルを理解してライブラリを書くために、コードの基本構造と言語の基本的な本質を理解することです。 Webには初心者向けの優れたコースがたくさんあります。おそらく、彼らが正確にどこにいるかを教えてくれるコメントがあります。 ( ) , .


,


画像



. , Kaggle — . , , - ResNet/VGG , — , .


, . Camera Identification , , , [ ods.ai ] , Kaggle , , — . , 46- , , , — , 300 , .


— .



( jupyter notebooks + ) :



, , ( ). .


— , - .


CSV, feather/pickle/hdf — .


, TalkingData, , memmap , lgb.


hdf/feather, - ( ) — CSV . — , , .



画像


Getting started ( , House Prices: Advanced Regression Techniques ), . , , , , .. など , — , .


— .

, 100% :




画像


… :)



— !!!


— — ! , . — , , , — . , .


, - , — ?


!


:



!



:



.


, . , . あなたが決めます。


フォーラムで質問できるので、なぜ5日間待ってすぐに読んでいないのですか?この段階では(私の意見では)、すでに形成されたスレッドを解決策の議論、あなたが持っているかもしれない質問で読むことをお勧めします-誰かがすでに尋ねているか、まったく尋ねずに自分で答えを探す方が良いです)


なぜこれすべてがそうするのですか? さて、もう一度-この段階のタスクは、ソリューション、方法、アプローチのデータベースを開発することです。 戦闘基地。 次の競争で時間を無駄にしないように、すぐに言ってください- ターゲットエンコードが入ってくることを意味します。ちなみに、フォールド内のフォールドを介してこのための正しいコードがあります。 またはああ! アンサンブルがscipy.optimizeを通過したことを覚えています。 ところで 、コードはすでに準備ができています。


そのようなもの...


作業モードに移動します


画像


このモードでは、いくつかの競合を解決します。 シート上のレコードが少なくなり、モジュール内のコードが増えていることに気付くたびに。 次第に、分析のタスクは、ソリューションの説明を読むだけの事実にまで削減されます。 そして、貯金箱に1つまたは2つの新しい呪文やアプローチを追加します。


その後、モードはエラー処理モードに変わります。 ベースは準備ができているので、正しく適用する必要があります。 各コンペティションの後、ソリューションの説明を読んで、見てください-あなたがやらなかったこと、より良くできること、見逃したこと、またはどこに行きましたか、私がToxicでしたように。 彼は非常によく歩き、金の下で歩き、個人的には1,500のポジションを飛びました。 涙を流すのは残念ですが...落ち着いて、間違いを見つけ、ゆったりとした投稿を書いて、教訓を学びました。


動作モードへの最後の出口の兆候は、最上位ソリューションの説明の1つがニックネームから書き込まれるという事実です。


この段階の終わりまでに、パイプラインにおおよそ何をすべきか:



著者は、線形モデルとツリーベースモデルのメタクラスを個別に作成し、単一の外部インターフェイスを使用して、異なるモデルのAPIの違いを平準化しました。 ただし、1つのキーで1行で実行できるようになりました。たとえば、1つの処理済みデータセットに対してLGBまたはXGBを実行できます。



まとめると


あらゆるスポーツ、そして競争力のあるDSもスポーツであり、多くの汗と多くの仕事です。 これは良いことでも悪いことでもありません。事実です。 競技への参加(プロセスに正しくアプローチした場合)は、技術的なスキルを非常に上手く発揮します。さらに、実際に何かをしたくないときにスポーツ精神を多少揺らし、直接すべてを壊します-しかし、あなたはラップトップに立ち上がって、モデルをやり直し、計算を開始しますこの不幸な小数点第5位をかじってください。


農場体験、メダル、ファン-Kaggleを決めましょう!


著者のパイプラインに関するいくつかの言葉


画像


このセクションでは、1年半にわたって収集されたパイプラインとモジュールの主なアイデアを説明しようとします。 繰り返しますが、このアプローチは普遍的またはユニークであると主張していませんが、突然誰かが助けるでしょう。



def do_cat_dummy(data, attrs, prefix_sep='_ohe_', params=None): # do something return _data, new_attrs 

入力には、データセット、作業用の属性、新しい属性のプレフィックス、および追加のパラメーターを渡します。 出力で、新しい属性とこれらの属性のリストを持つ新しいデータセットを取得します。 さらに、この新しいデータセットは別のピクルス/フェザーに保存されます。


これにより、事前に生成されたキューブからトレーニング用のデータセットをすばやく組み立てることができます。 たとえば、カテゴリの場合、一度に3つの処理を行います-ラベルエンコーディング/ OHE /頻度、3つの別々のフェザーに保存し、モデリングの段階でこれらのブロックを再生し、1つのエレガントな動きでさまざまなトレーニングデータセットを作成します。


  pickle_list = [ 'attrs_base', 'cat67_ohe', # 'cat67_freq', ] short_prefix = 'base_ohe' _attrs, use_columns, data = load_attrs_from_pickle(pickle_list) cat_columns = [] 

別のデータセットを構築する必要がある場合は、 pickle_list変更して再起動し、新しいデータセットを操作します。


表形式データ(実およびカテゴリ)の主要な関数セットには、カテゴリのさまざまなコーディング、カテゴリの数値属性の投影、およびさまざまな変換が含まれます。


  def do_cat_le(data, attrs, params=None, prefix='le_'): def do_cat_dummy(data, attrs, prefix_sep='_ohe_', params=None): def do_cat_cnt(data, attrs, params=None, prefix='cnt_'): def do_cat_fact(data, attrs, params=None, prefix='bin_'): def do_cat_comb(data, attrs_op, params=None, prefix='cat_'): def do_proj_num_2cat(data, attrs_op, params=None, prefix='prj_'): 

ソース属性のリストと変換関数のリストを転送する属性を結合するための汎用スイスナイフ。通常どおり、データセットと新しい属性のリストを取得します。


  def do_iter_num(data, attrs_op, params=None, prefix='comb_'): 

さらに、さまざまな追加の特定のコンバーター。


テキストデータを処理するために、前処理、トークン化、見出し語化/ステミング、頻度表への変換などのさまざまな方法を含む個別のモジュールが使用されます。 など sklearnnltkkerasを使用したすべてが標準です。


時系列は、通常のタスク(回帰/分類)とシーケンス間で両方の元のデータセットを変換する機能を備えた別のモジュールによっても処理されます。 ケラスを仕上げてくれたFrançoisCholletに感謝します。これにより、seq-2-seqモデルの構築が悪魔を呼ぶブードゥー教の儀式に似てしまうことはありません。


ちなみに、同じモジュールには、シリーズの通常の統計分析の機能もあります-定常性のチェック、STL分解など。これは、シリーズを「感じて」、それがどのようなものかを見るために分析の初期段階で大いに役立ちます。



  _fpreproc = fpr_target_enc _fpreproc_params = fpr_target_enc_params _fpreproc_params.update(**{ 'use_columns' : cat_columns, }) 


つまり、LGBと連携するために、モデルを作成します


  model_to_use = 'lgb' model = KudsonLGB(task='classification') 

XGBの場合:


  model_to_use = 'xgb' metric_name= 'auc' task='classification' model = KudsonXGB(task=task, metric_name=metric_name) 

そして、すべての機能はさらにmodel動作しmodel



このパイプラインは、 Home Creditとの最近の競争でもう一度テストされました。すべてのブロックとモジュールを慎重かつ正確に使用することで、94位になりました。


作者は一般に、表形式のデータと通常作成されるパイプラインについては、コンテストでの最終提出物がトップ100のリーダーボードに入るべきだという平穏な考えを表現する準備ができています。 当然、例外もありますが、一般的にこの声明は真実のようです。


チームワークについて


画像


Kaggleがチームかソロかを決めるのはそれほど簡単ではありません-それは人(およびチーム)に大きく依存しますが、始めたばかりの人への私のアドバイスはソロを始めようとすることです。 なんで? 私の視点を説明しよう:



証拠と約束されたレーキカードに関するキャプテンからの有用なヒント:)


画像


これらのヒントは著者の経験を反映したものであり、教義ではなく、独自の実験によって検証することができます(および検証する必要があります)



そして最後に:



便利なリンク


画像


全般


http://ods.ai/-最高のDSコミュニティに参加したい人向け:)
https://mlcourse.ai/-ods.aiコースWebサイト
https://www.Kaggle.com/general/68205-Kaggleのコースに関する投稿


一般に、この記事で説明されているのと同じモードで、mltrainingsのビデオサイクルをご覧になることを強くお勧めします。興味深いアプローチとテクニックがたくさんあります。


映像



コース


専門分野の2年目の「 データサイエンスコンペティションに勝つ方法:トップカグラーから学ぶ 」から、Kaggleで問題を解決する方法とアプローチについて詳しく知ることができます


課外リーディング:



おわりに


画像


一般的なデータサイエンスのトピック、特に競合するデータサイエンスのトピックは、アトム(C)と同じように無尽蔵です。 この記事では、著者は競争力のあるプラットフォームを使用して実用的なスキルを向上させるトピックを少しだけ明らかにしました。 それが面白くなったら-接続し、見回し、経験を蓄積し-あなたの記事を書いてください。 より良いコンテンツがあればあるほど、私たち全員にとって良いことです!


質問を予想して-いいえ、著者のパイプラインとライブラリはまだ自由に利用可能にされていません。


ods.aiの同僚に感謝します: Vladimir Iglovikov(ternaus)Yuri Kashnitsky(yorko)Valery Babushkinvenheads)Alexei Pronkin(pronkin_alexey)Dmitry Petrov(dmitry_petrov)Arthur Kuzin(n01z3) 、またみんな編集およびレビュー用の公開前の記事。


最終校正をしてくれたNikita Zavgorodnoy(njz)に感謝します。


ご清聴ありがとうございました。この記事が誰かに役立つことを願っています。


Kaggle / ods.aiでの私のニックネーム: kruegger



Source: https://habr.com/ru/post/J426227/


All Articles