![見出し画像](https://assets.st-note.com/production/uploads/images/103661682/rectangle_large_type_2_3f53bbfa0a4aed173e33961c99ccd3df.png?width=1200)
「第1回金融データ活用チャレンジ」に参加して良かったので記事にした
2023年1月〜3月にかけて、金融データ活用推進協会(FDUA)が主催した機械学習のコンペティション 第1回金融データ活用チャレンジに参加しました。
自分が金融機関に勤めていることもあって、上位に食い込みたいというモチベーションも働き、日々、試行錯誤を繰り返しながら、モデルの改善に取り組みました。
結果として、参加人数1,658人に対し100位以内に入り、機械学習コンペで初のメダル(銅メダル)をいただきました。このコンペティションを通じて、機械学習のスキルが大幅に向上したと実感しています。
貴重な学びの機会を与えていただいた金融データ活用推進協会に感謝申し上げるとともに、多くの金融マンに興味をもっていただくため、コンペティションの概要や自分自身の想い、学びの内容を記事にまとめて、発信したいと思います。
コンペティションの概要
住宅ローンの契約者が、ある時点において、住宅ローンの支払いを延滞するかどうかを予測します。
具体的には、契約者の属性情報(年齢等)や口座情報(口座開設日、入出金、預金残高等)などの金融データを使って、契約者ごとに延滞する確率を予測して提出します。
コンペティションの意義
データの利活用について、銀行業界全般で考えてみると、大手行とそれ以外ではっきりと二極化が進んでいる印象です。
例えば、地方銀行の上位クラスでも、データ整備も含めて、データの利活用はほとんど進んでいないのが実態と思われます。
原因はいろいろありますが、人材の不足が最も大きいと思います。
データ利活用の重要性は昔から叫ばれていたことですが、経営レベルでお尻に火がついたのはここ最近だと思います。
金融機関の多くは、データ利活用に長けた人材を雇ってこなかったし、教育もしてこなったので、人材が不足しているのは致し方ありません。
この点、このコンペティションは、金融業界全体でデータ利活用に向けた人材の発掘や育成を進めていくための、貴重な一石を投じたと思いました。
今回、1,700名近くの参加者があり、そのうち、金融機関の関係者(金融マン)は500名程度だったようです。
全体の人数は多かったものの、金融マンの参加が相対的に少なかったのは、データ利活用にかかる遅れや人材不足を象徴しているのはないかと思いました。
ぜひ、今後も継続的な開催を通じて、金融マンの参加の裾野を広げるとともに、コンペ上位入賞に食い込むような盛り上がりを期待したいですね。
機械学習のスキルが向上したことについて
私自身、機械学習は初心者マークなのですが、そんな私でも、分かっていることがあります。
機械学習のスキルは本を読むだけでは向上しません。
よく「手を動かせ」と言いますが、本に書いてあるコードを写経しても、機械学習においては、あまりスキルは上がらないと思います。
大事なことは、「手を動かす」+「頭を使う」です。
これは、KaggleやSIGNATEの機械学習コンペに参加して、試行錯誤することでしか得られないことだと思います。
一方、KaggleやSIGNATEに用意されているコンペは、初心者向けだと「練習問題」となっていて、順位を上げても褒賞の対象にならないため、モチベーションが上がりません。
この点、今回の金融データ活用チャレンジは、初心者でも参加できる難易度で、かつ褒賞も用意されていたので、コンペを頑張るモチベーションにつながりましたね。
私自身、このコンペに参加するまでの機械学習スキルは、機械学習のオーソドックスな流れを理解しているぐらいのレベルでした。
例えば、データ分割はホールドアウト法しか使ったことがない、評価指標はaccuracyぐらいしか理解していないといった感じ。。。
このコンペティションが始まり、まずは、事務局から配布されたチュートリアルのnotebookをなぞって提出しました。
チュートリアルなので、それほどスコアは高くないです。
そこで、自分なりに特徴量をいくつか生成したうえで、モデルを訓練し、提出したところ、AUCスコアが大幅に上がり、0.8%台中盤まで行きました。
ここから、「やればできるんじゃないか」とモチベーションに火がつき、Kaggle本を何冊か買ったうえで、どうすればスコアが上がるか、真剣に研究し始めました。
この「どうすれスコアが上がるか?」と思えるかどうかが大事だと思います。
その後、他の参加者の方がブログでコードの一部を共有してくれたり、事務局からもテクニックの紹介がありました。
こうした他の方の解法(コードやテクニック)を知れたことも、機械学習のスキル向上に繋がったと思います。
具体的に学んだスキルについて
コンペで学んだことをまとめると以下の通りとなります。
学んだこと❶バリデーションの実装方法
前述の通り、データ分割したうえで、予測結果の正しさを検証する方法については、ホールドアウト法しか扱ったことがありませんでした。
ホールドアウト法はシンプルで良いのですが、全ての訓練データを学習に利用できない欠点があり、精度を上げるためには交差検証法が必須となります。
一方、交差検証法を使うとなると、リークと呼ばれる検証データが答えを知ってしまう現象を避けなければならず、リークが起きないような実装が大事になってきます。
このコンペを通じて、おそらく機械学習の基本とも言える、こうしたバリデーションの考え方や実装方法を学ぶことができました。
その過程で、K分割交差検証法だけでなく、層化K分割交差検証法(正例・負例の偏り一定)やグループk分割交差検証法なども学ぶことができました。
学んだこと❷不均衡データの調整方法
このコンペは、単純な二値分類でしたが、正例(1)と負例(0)を比べた時に正例データが極端に少ない不均衡データでした。
この場合、普通に学習させると、負例に偏った予測になりますので、データを調整する必要があります。
データの調整方法には、負例を少なくするダウンサンプリングや、正例を多くするオーバーサンプリング、予測値に重み付けをする方法など、様々あることを学び、それぞれの方法について、実際に実装して効果を確認することができました。不均衡データの調整をするかどうかでスコアが大きく変わるため、かなり重要だと実感しました。
学んだこと❸評価指標AUCが何を意味するのか
機械学習コンペでは、どのような指標に基づいてスコアが評価されるか、どの評価指標の特徴は何かを知っておくことが重要です。
今回、AUCという聞き慣れない指標が評価指標として与えられ、その内容をかなり調べました。
コンペでは、各テストデータの予測確率を提出せよとなっていたので、数値として0〜1に収めなければならないと思っていたのですが、調べたところ、AUCは数値の大小関係だけを見ているため、数値を0〜1の範囲に収めなくて良いことも知りました。これは驚きでしたね。
学んだこと❹LightGBMの実装方法やパラメータ
機械学習コンペで高い精度を出すLightGBMについて、その実装方法を完璧にマスターすることができました。
また、主要なパラメータについても、理解できました。
ブースティング系のモデルは実装方法が似ているので、LightGBMをマスターしておけば、XGBoostやCatBoostも容易に実装することができます。(パラメータだけ注意です)
学んだこと❺アンサンブル学習のやり方
コンペも後半になってくると、なかなかスコアが上がらなくなってきます。そうした時に、有効なのが、これまでに作った複数のモデルの予測結果を混ぜ合わせるアンサンブル学習 だと知りました。
Kaggle本でアンサンブル学習の方法を学び、実際に試していくことで、その威力を実感しましたが、中でも、最も威力を発揮したのは、スタッキングと呼ばれる技法でした。
本を読んだだけでは、なかなかイメージがつかず、実際にコードを書くことで内容を理解してきましたが、簡単に言うと、複数のモデルが出した予測値を特徴量と見立てて、再学習することだと理解しています。
なぜ、スタッキングの効果が高いのかまでは理解していませんが、機械学習の必殺技として、習得できて良かったなと思います。
学んだこと❻過学習対策
正則化やアーリーストッピングといった、お勉強の世界で出てきた過学習を防ぐ方法についても学び、実装することができました。
Databricksについて
このコンペティションの特徴の一つとして、データ分析からモデルの構築、予測の提出について、Databricksというクラウド型の統合データ分析基盤で行う必要があったというのがあります。
Kaggleなど一般的な機械学習コンペでは、個人で使いたい分析環境を選択できるのが普通ですが、このコンペでは、分析環境が指定されていたのです。
この背景には、データの漏洩防止や、競争の公平性などがあったと思われますが、金融マンなどの非エンジニアにとっては、少しハードルが高かったと思われます。
この分析環境のために、離脱した人たちも少なくなかった思います。
私自身も、最初は、SIGNATEのIDを認識させられなかったり、予測結果を提出できなかったりで苦労しました。
しかしながら、最初の関門さえ通過すれば、データベースからのデータ連携やデータの可視化、mlflowによるモデルの管理など、機械学習のプラットフォームとしての素晴らしさに気付かされます。
特にモデルの管理は良かったですね。モデルのパラメータや特徴量の重要性を参照できるし、必要に応じて、モデルを呼びだせるところは便利でした。
何より、こうした最先端の機能を無料で使わせてもらえたことに感謝です。
さいごに
いまや、ビックデータが主流となり、多くのデータ(特徴量)を使って、答えを導くことが求められています。この点、これからの時代のデータ解析においては機械学習が必須のスキルになると思います。
こうした機械学習のコンペに積極的に参加することで、そのスキルを上げていきたいですね
よろしければサポートお願いします! いただいたサポートはクリエイターとしての活動費に使わせていただきます!