参考にした情報フォルダ構成configsdatainputoutputfeatureslogsmodelsnotebookscriptsutils計算の実行Git管理おわりにはじめに本記事では、Kaggle用フォルダ構成や管理方法について、現時点での自己流の方法をまとめます。「現状自分はこういうやり方を試している」という話なので、よりよい方法などあれば、ぜひTwitterなどで教えてください。具体例がないと抽象的で分かりづらいと思ったので、Kaggleのタイタニックを題材にしました。GitHubのリポジトリも公開しています。KaggleのタイタニックKaggleのタイタニックとは、Kaggleのチュートリアル的な問題として認知度の高いコンペティションです。タイタニック号の乗客の属性情報(性別・年齢・チケットの種類など)から、生存したか否かを予測します。Calendarに書く話題を募集したところ、次のようなリプを頂きました。本記事は、これらの質問にお答えできるような内容にしたいと思います。Challenge」で優勝したflowlightさんのリポジトリを非常に参考にしています。github.com特徴量の管理に関する部分では、同じくflowlightさんのリポジトリを参考に執筆されたというamaotoneさんのブログが理解の助けになりました。amalog.hateblo.jpフォルダ構成フォルダ構成は以下の通りです。configsdatainputoutputfeatureslogsmodelsnotebookscriptsutilsconfigsjsonファイルで、諸設定を記載しています。記載している情報は「利用している特徴量」「学習器のパラメータ」などです。"PassengerId"}またコンペのデータに依存するカラム名なども、このjsonファイルから読み取る形式にしています。datadataフォルダは、input/outputに分けています。inputinputフォルダには、元データのcsvファイルや、feather形式に変換したファイルなどを配置しています。outputoutputフォルダには、提出用のcsvファイルを出力します。ファイル名は「sub_(year-month-day-hour-min)_(score)」のように設定し、後述するログと照合できるようにしています。featuresfeaturesフォルダには、train/testから作成した各特徴量を保存しています。base.pyなど、詳細については先に紹介したamaotoneさんのブログをご参照ください。amalog.hateblo.jp1階層深いimportancesフォルダは、特徴量の重要度を出力するために用意しました。logslogsフォルダには、計算の実行ごとに下記の情報などを出力しています。ファイル名は「log_(year-month-day-hour-min).log」のように設定し、前述した通り提出用のcsvファイルと照合できるようにしています。利用した特徴量trainのshape学習器のパラメータcvのスコアLightGBMのログ出力についても、amaotoneさんの次のブログを参考にしました。amalog.hateblo.jploggerに関しては、現在こちらのブログを読みながら更なる良い方法を検討しているところです。icebee.hatenablog.commodelsmodelフォルダには、学習器を用意しています。下記のように汎用的に作ることで、別のコンペでも使い回せることを意識しています。Notebookを配置しています。ここで試行錯誤した結果を、適切なフォルダ内のpythonファイルに取り込んでいきます。scriptsscriptsフォルダには、汎用的なpythonファイルを配置します。ファイルは、csvファイルをfeather形式のファイルに変換します。'.feather')utilsutilsフォルダには、汎用的に使える関数を書いています。計算の実行リポジトリのルートで以下を実行します。このrun.pyは、コンペに応じて比較的自由に記述することにしています。このrun.pyから、汎用的に書いた各フォルダの要素を取り出してくるイメージです。run.pyGit管理リポジトリはGit/GitHubで管理しています。自分一人でしか作業しないので、masterに直pushする運用をしています。tkmさんのブログに書いてある方針が近い印象です。yutori-datascience.hatenablog.comおわりに本記事では、Kaggle用フォルダ構成や管理方法について、現時点での自己流の方法をまとめました。Notebookだけで処理していましたが、再現性が破綻しかけたこともあり、最近は適切にフォルダを分割して疎結合でファイルを管理するよう意識しています。最初にフォルダ構成を検討する際には時間がかかりましたが、コンペに依存しないよう切り分けておくことで業務などでの再利用も可能で、良い循環になっているかと思います。Calendar」の10日目の記事です*1。月別アーカイブはてなブログをはじめよう!upuraさんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。