for fam_name, passengers in families.items(): for p in passengers: print(p['Ticket'], get_n_members(p))
で確認すると分かるのだが、苗字が同じ場合に間違って別の家族の一員扱いされて SibSp
や Parch
がコピペされているケースがあるようだ。実際の家族については Ticket
が一致している、或は連番*1であるグループのほうが正しそうに見える。
単独者と家族連れにわけれそれぞれで {決定木, XGBoost, LightGBM} で訓練と評価してみると、適当なテストセットで 80%, 84% くらいの精度になるので、ごちゃ混ぜにせずに分けて評価したほうが良さそうだった。当たり前と言えば当たり前で、統計データの分布を見る時も多峰性を考慮しましょうというのが教科書的な内容だ。ところが、データが複雑になっているので pandas で表面的に見ても “多峰性” に気がつかないのが難しいところだ・・・。
この分離を施した上で、ランダムフォレストと XGBoost と LightGBM でアンサンブルしたらそこそこのスコアを狙えるだろうか・・・?
*1:雰囲気的には、2 番差までは家族っぽい。