俺って、おバカさんなので、とっても優秀な人工知能を作って代わりに頑張ってもらうことにしました。世界の端っこでおバカな俺が夢の達成に向けてチマチマ頑張る、そんな小さなお話です。現在はG検定に合格し、E資格取得とKaggle参画に向けて、Pythonや機械学習の勉強中です。道半ばですが、お時間がありましたら見て行ってください。テーブルコンペ先日、「ProbSpace」というプラットフォームで開催された「給与推定」コンペに参戦したので、振り返っていきたいと思います。私にとって、初めて公式の結果が確定したコンペとなり、最終順位は参加310チーム中、46位でした。全体の15%以内に入れたので、まずまずの出来だったと思います。上位陣の解法を拝見すると、自分のコードは、まだまだ、全然できていないなぁと感じました。時系列に取り組みを振り返っていきます。(あえて、時系列にしたのは、計画的にとりくめなかった自分の反省を込めて・・。特徴量(その1)1.欠損値を確認データを読み込んで、とりあえず欠損値の有無を確認しました。int64確認したところ、欠損値がなく、補完の処理も不要であったので、ここは楽でした。文字列の情報になっているので、数値データに置き換えました。le.fit_transform(df['area'])アンサンブル学習(スタッキング)のモデルを作成(その1)1.1層目の作成1層目は、まず、RandomForet,AdaBoost,GradientBoosting,ExtraTree,Baggingの5つをつかってみました。ExtraTreesRegressor,BaggingRegressor)2.2層目の作成2層目は、LightGBMを使ってみました。3.全体構成その1全体としては、以下のような感じです。特徴量(その2)特徴量(その2)では、いくつかの特徴量を新たに追加したのですが、効果を発することなく終わってしまいました。「Area」について、単純にコード化するのではなく、エリアごとのレコード数をコードの代わりにする列を作ってみました。test_df.groupby('area')['overtime'].transform('count')2.Educationを分割また、「Education」が、2以下と3以上でSalaryの傾向が異なっていたので、2分割にしてみました。2以下と3以上の区分に分ける。test_df['education']]3.Service_length,commute,study_timeをビンニング「Service_length」,「commute」,「study_time」については、それぞれ、5、5、4にビンニング処理を実施。le.fit_transform(test_df['Categorical_length'])#以下同様にcommute,study_time特徴量(その3)特徴量(その3)では、複数の特徴量を組み合わせたり、対数をとったりしてみました。これによって、MAEが24を切ることができました。1.交差項追加いろいろな列の掛け算をとって、モデルに投入して、精度が上がる組み合わせをOptuna等をつかって探索しました。数値の列については、対数をとってみました。df['Log_'+col]=np.log1p(df[col]+1)to_Log(train_df)to_Log(test_df)ついでに、Salaryも対数変換しました。うっかり、提出用のデータも対数のまま提出してしまい、提出データの精度がガタ落ちして、何が起こったかわからず、プチパニックになりました。テストデータ提出時は以下を忘れてはいけない。特別扱いするとよいとの記事があったので、さっそく参考にさせていただきました。Encordingにも挑戦してみました。リークとならないように、平均につかったレコード以外を置き換えていくのがポイントですね。特徴量として「1対数変換を行う前」「➁対数変換を行った後」「➁にTargetEncording実施」の3つそれぞれに、予測モデルとしてRandomForet、AdaBoost、GradientBoosting、ExtraTree、Baggingの5つを使った、合計15個の予測パターンを作成しました。2.2層目の作成2層目は、LightGBMで、1層目の15個の予測パターンのうち、どのパターンを使うと最も精度が高くなるかをOptunaを使って探索しました。3.全体構成その2探索した結果、以下のような構成となりました。アンサンブル学習(スタッキング)のモデルを作成(その3)1.3層目を作ってみるモデルを作成(その2)で行き詰まってしまったので、その2のOptunaで、精度が良かった組み合わせをいくつかピックアップして、2層目の出力の平均をとる3層目をつくってみました。ここからは、いろんなパターンを作成して、少しでも精度が良かったモデルができたら出力ファイルをためておいて毎日提出するという力技になってしまいました。最終結果としては、提出回数109回、ベストスコア:22.539、順位:46位でフィニッシュできました。最後までやり切った初めてのコンペでした。充実感もありましたが、やはり、全体的な計画ができていなかったので、特徴量を検討するのか、モデルを検討するのか、どっちつかずで、おろおろしている間に終わってしまったのが反省点でした。今回は木モデルを中心に構成しましたが、上位陣の方々の解法を拝見するとニューラルネットワークを使いこなしていらっしゃったので、もっと勉強して手札を増やしていく必要があると感じました。次のコンペはもっと、計画的にいろいろなパターンを試して、さらに順位アップを狙っていきたいと思います。合格記2019年8月31日(土)にE資格を受験して、合格しました!E資格対策として勉強の進め方や、参考書などをまとめました。これから受験される方がいらっしゃいましたらご参考まで。oregin-ai.hatenablog.com2019年3月9日(土)にG検定を受験し、見事合格できました!受験の体験記や勉強法などを別のブログにまとめました。これから受験される方がいらっしゃいましたらご参考まで。AdaBoostに挑戦してみる。選択した特徴量を使ってNNモデルの学習率をグリッドサーチする。受験の体験記や勉強法などを別のブログにまとめました。これから受験される方がいらっしゃいましたらご参考まで。検索はてなブログをはじめよう!kanriyou_h004さんは、はてなブログを使っています。ブログを報告するスターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。