【dataiku】「コードも書けるけどツールって使った方がいいの？」を考える趣味プログラマーの金融データ活用チャレンジ

# はじめに
記事を閲覧いただきありがとうございます。

私は金融機関でシステム開発の仕事に従事しております。
データ分析業務やPython言語は共に仕事では未経験ですが、趣味でpythonを使ってものづくりを楽しんでおります。

そしてこの度はsignateで開催されました「第2回 金融データ活用チャレンジ」に参加させていただきました。

今回は様々なツールを提供していただいており、その中でも特に魅力的に感じましたdataikuのすばらしさを記事にして共有したいと思い執筆いたしました。
社内の勉強会でもdataikuの紹介をいたしましたが非常に好評でした。

この記事では
「コード（python）も書けるけどツールって使った方がいいの？」
「自分の普段使っている環境（Anaconda、GoogleColaboratory等）かツールを使うか迷ったけどどっちが良かった？」
のような疑問に自分なりに回答していこうと思います。
ちなみに今回私は普段自分が使っている環境と併用しました。

今後のコンペでもこのようなツールの提供があった場合、使用するかどうかの判断に少しでもお役に立てれば幸いです。また私のデータ分析についても共有させていただきますのでご意見等いただければと思います。
※基本的な操作についてはyoutubeにてハンズオン動画を公開されておりますので省略させていただきます。

# 筆者のレベル感
・コンペ参加は3回目（二値分類２回・画像認識1回）
・今回の順位は122位（メダル圏外）、第1回金融データ活用チャレンジは87位（銅メダル）
・LightGBMを使って予測するコードが書ける
・ターゲットエンコーディングやスタッキング等といった精度向上のテクニックについても実装できるがまだまだ勉強中

# 自分なりの結論
自分の慣れた環境でコードを書いた方が良い点や小回りが利く点は多数あり、自分で実装できるなら慣れている環境でも問題ないです。（当たり前ですが）
ただ一からコードを書くよりも圧倒的に短時間で実装できるEDAや前処理・学習処理もおそらくあるかと思いますのでPython初学者の方や私のように力量に不安がある方は一度使ってみることをお勧めします。（dataikuでもPythonレシピといってコードでのデータ操作は可能です）


# コンペでの活用シーン
## EDA
圧倒的にdataikuが楽にわかりやすく可視化できます。
データを読み込ませてメニューをいくつかクリックしていくだけでデータを可視化できます。

RevLineCrの内訳
![スクリーンショット 2024-02-16 224304.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3714008/85a2d392-81c9-52f7-ca2d-c74878774f12.png)
RevLineCrとMIS_Status（目的変数）のモザイクプロットと実際の数値
![スクリーンショット 2024-02-16 224220.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3714008/e0755aa8-604a-014a-5ed2-d34a783de27a.png)
![スクリーンショット 2024-02-16 224155.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3714008/754c297d-67c8-131e-bc3d-6c8fcf407c06.png)

上記のような内容が短時間で出力できたり、複数の変数を一気に可視化できたりなどで非常に便利でした。

コードを自分で書く場合、事前に関数を作ってある場合はまだしも１からであれば時間がかかってしまいます。当然自分の好きなように可視化できますがdataikuでの可視化の選択肢も非常に潤沢で可視化には困りませんでした。

## 前処理・後処理
こちらに関してもdataikuは使いやすかったです。
特にビジュアルレシピと呼ばれるメニューについてはアイコンもわかりやすく初学者にはとっつきやすい良いデザインだと感じました。
![スクリーンショット 2024-02-16 230227.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3714008/dc326b66-80c4-af8c-4e67-2e7d0f3408d1.png)

特に前処理はPrepareをよく使うことになりますが、日付の解析や分解などが数クリックでできてしまうことは衝撃でした。
![スクリーンショット 2024-02-16 231231.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3714008/174f7c4b-f1b6-e4dc-08c1-46adce80e8c9.png)

ただ用意されているレシピではかゆいところに手が届かないところもありました。
~~例えばJoinについては２ファイル以上選択できないためPythonのコードを書くか２個ずつ結合していくことが必要でした。処理も都度行われるためちょっと時間がかかってしまうなーという感想です。~~
⇒すみません、３つ以上を同時にjoinできました。

## 学習・予測
今回、私が最も便利だと感じたのはこの学習機能です。
多くの学習モデルはまだ習得できておらず私は基本LightGBMばかり使っております。
今回スタッキングを実装するために多くの機械学習のモデルを作る必要がありました。

スタッキングのイメージ
![スクリーンショット 2024-02-17 010901.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3714008/5312231f-9c4b-655e-9233-ea69105bbd85.png)

この複数のモデルを自分で全部コードを書いて実装するのはしんどいというのが私の力量です。
それが今回はdataikuで一気に複数モデルを使って予測ができるのですごく助けられました。
アルゴリズム選択でONにするだけで学習を始めてくれます。
![スクリーンショット 2024-02-16 233839.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3714008/03cd5693-b3fe-72e5-8740-78577ca01656.png)
実行してしばらく放置しておくと↓のように結果が出ます（meanF1を指標にカスタムしています）
![スクリーンショット 2024-02-16 234201.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3714008/57981816-9f2c-afbe-52c7-1cbfadd18687.png)

少しだけ自分でもパラメータを調整したりしましたが、デフォルトのパラメータでもある程度精度が出てくれたのでもの凄く省力化できました。

ただし分割したデータをそれぞれ連続して学習させようとするとそれぞれの学習が並列で走ってしまうためメモリーエラーで止まってしまうこともありました。順番に走らせる方法があるかは探しきれなかったです。

またアンサンブルも非常に簡単でモデルを選択してクリックするだけでアンサンブルモデルを作成してくれました。
![スクリーンショット 2024-02-16 235103.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3714008/21a066b3-9d27-426e-09c3-d96fb6765ec0.png)

今回はこのアンサンブルモデルがかなり良い精度になっておりました。
ただ最終日は色々あったため投稿できず精度の評価はここまでとなっていまいました。（※早めに投稿できなかった自己責任です）
一応スタッキングして学習した他の投稿ファイルでは0.683くらいだったので大きくは変わらないかもです。

こちらも作ったモデルに対してデータを選択し、クリックするだけで予測ができました。
![スクリーンショット 2024-02-17 000702.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3714008/2cb3f030-9d71-67be-688b-d2d57e11ddb4.png)
閾値調整もこちらででき、出力するカラムも選択できるため非常にわかりやすかったです。

そして投稿データに合わせた後処理を挟んで完成したデータをExportして提出で完了です。

## 完成したフロー
前処理（学習データのインプットまで）
![スクリーンショット 2024-02-17 144659.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3714008/f7d79b23-6562-c099-e989-42aaea49be81.png)

学習・予測（大量なので一部のみ）
![スクリーンショット 2024-02-17 150319.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3714008/aa885358-9d8d-c85f-c168-b2197d302dd3.png)

整理できてなくて見にくいですが、色んなモデルを学習させてスタッキングしようとすると大量に線が引かれてしまいます。ZONEを使って整理すれば良いと思うのですがちょっと追いつかなかったです。
前処理について文字で説明すると
①trainデータ、testデータ、外部データの読み込み
②データの結合
③データのクレンジング（例：欠損値補完・日付形式変換・金額項目の数値項目化など）
④データの組み合わせや計算で新規特徴量追加（例：term当たりの融資額、融資額と承認額の割合、東海岸の州フラグなど）
⑤特徴量の集計処理・ターゲットエンコーディング
大まかにこのような順番に処理しました。


# 全体を通して
## 操作感
アイコン等も含めてデザインは非常にわかりやすく素人でも直感的に操作することができました。

メモリの使用量も抑えられており、メモリ管理が楽でした。

（複数のデータセットをまとめてそれぞれ予測する等）まとめて処理実行みたいな操作ができない点もあり（もしかしたらあるかもですが）コード書いた方が早いかもと思う点は少しありました。それでも使うメリットの方が圧倒的に多く感じます。

メニューが英語なのでChromeの翻訳機能を駆使しながら操作するのがちょっと手間に感じましたが、使ってるうちに覚えるので何とかなりました。日本語対応もされていくそうなので期待して待っております。

## ビジュアルレシピとコード（Pythonレシピ）の使い分け
### prepareで処理したものの例
・日付の変換、金額の変換、計算（ハンズオンで実施されたもの）
・formulaでできそうな計算（結構なんでもできますがまだ使いこなせてないです）
・GeoPoint変換と距離の計算
　![スクリーンショット 2024-02-17 152541.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3714008/a1128c59-9012-1f7b-602c-e2c9a1c6ccb0.png)
カリフォルニアなど経済規模の大きい州からの距離が近いほど新規ビジネスは成功しやすいか？と思って特徴量作成しました。そして標準で用意されている距離を求める処理の実装がすごく簡単でした。

### Pythonレシピで処理したものの例
主にビジュアルレシピでどう実装するか調べきれなかったものがコードでの実装になりました。
・DisbursementDate_parsedがnullの場合、ApprovalDate_parsedから補完する
・FranchiseCodeの上一桁の項目を作る
・Stateの緯度経度から州を4分割（アラスカとハワイはさらに分割）
![スクリーンショット 2024-02-17 154022.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3714008/efdf3c49-cd9d-2d0c-1c7a-e2eb4093a2f6.png)
こんな感じでjupyter notebookを使って書けるのでぱっとコードが思いつくものはこのように実装しました。

## 自分の環境かツールどっちを選ぶか
基本的にdataikuを使っていきたいと私は考えました。
どんなものも慣れ次第という普遍的な結論ですが、dataikuを主に使っていきたい理由としては
・そもそもPythonコードを実装できる
・EDAが圧倒的に楽
・自動作成のフローが視覚的にわかりやすい
・インプットデータは上書きされないので前処理工程のデータをすぐに確認できる
・prepareで実行した処理について確認・並べ替え・グルーピング・削除などがしやすい
・再起動後でも１から実行し直しが不要で後続から始めることができる
挙げればキリがないですが初学者からプロまで便利に使えると思います。

## 併用してみた
自分が普段使っている環境であれば欲しいライブラリのimport等で困ることはありませんので
・前処理を普段の環境で実施し、できたデータをdataikuで学習させる
・前処理をdataikuで実施し、できたデータを普段の環境で学習させる
などやってみて柔軟に使い分けることで好きなように実装できました。

## 特徴量
今回の私の作ったモデルではターゲットエンコーディングにおいて作った特徴量・またスタッキングで足した予測値がすごく効いておりました。
効きすぎたのが裏目感はありますがスタッキングを除いて一部共有しておくと
・ApprovalDateのターゲットエンコーディング
・NoEmp+CreateJob
・City+BankStateのターゲットエンコーディング
・City+urban_ruralのターゲットエンコーディング
などでした。
Stateの緯度経度からBankStateとの距離、経済が活発な都市（NYやCA）からの距離、東海岸の州なのか西海岸の州なのかみたいな特徴量をたくさん作りましたがあまり効果がありませんでした。
今回はコンペ用に作られたデータなので実態のオープンデータがうまく活用できなかったのかなという印象です。

# 最後に
今回はコンペ期間中に風邪をひいてしまって諦めようかと思ってましたがdataikuを使うことで色々と省力化でき、最後まで走り切ることができました。dataikuは今後とも是非使っていきたいと思える素晴らしいツールでした。
結果は個人的にはもっと上を目指していたので残念でしたが、第３回があればまた参加させていただきたいと思います。

色々とハプニングもございましたが、FDUA様、signate様、dataiku様、Databrics様・Tableau様・他の参加者の皆様・運営に関わっていただいた皆様のおかげで非常に勉強になりました。本当にありがとうございました。