DigitalABOUTSERVICECASENEWSSPECIALISTRECRUITSPECIALIST多様な専門性を持つNRIデジタル社員のコラム、インタビューやインサイトをご紹介します。直道2023.2.14機械学習AI金融データ時系列予測SIGNATEこんにちは。NRIデジタルの髙田です。昨今、金融業界ではデジタルデータの収集が進んでいますが、収集したデータを活かしてどの様に生産性を向上させるかが課題となっています。金融業界の豊富で多様なデータを分析することはデータサイエンティストとしてのスキルアップにも大いに役立つものと思っています。そんな中、金融データ活用推進協会(FDUA)1)https://www.fdua.org/主催で、「第1回金融データ活用チャレンジ」2)https://signate.jp/competitions/841コンペティションがSIGNATEで開催されています。計5名で参加しました。本記事では、コンペティションで指定の統合データ分析基盤であるDataBricks3)https://www.databricks.com/jpを用いたデータ分析手法に主眼を置いてご紹介していきたいと思います。(コンペティション終了後に解法編を公開予定です。)なお、本記事はpythonの基本的な文法を理解しており、これからデータ分析コンペに挑戦したいという方を想定して記載しています。今回私たちが参加している「第1回金融データ活用チャレンジ」は入出金や預金残高などの銀行の口座情報から、顧客が基準年月+3ヶ月目と基準年月+4ヶ月目に連続して住宅ローンを延滞するかどうかを予測するタスクを解くコンペティションです。Risk」4)https://www.kaggle.com/c/home-credit-default-riskが挙げられます。Risk」は、個人のクレジットの情報や過去のローン応募情報などから、顧客が債務不履行になるかどうかを予測するタスクを解くコンペティションでした。評価指標もAUC5)https://atmarkit.itmedia.co.jp/ait/articles/2211/24/news019.htmlであった点も今回の「第1回金融データ活用チャレンジ」と共通しています。Riskの上位解法を参考にすることで、本コンペティションでも良いスコアを出すことができると考えています。本コンペティションの詳細な解法については、コンペティション終了後に寄稿する予定です。Inc.社のDatabricksというクラウド型の統合データ分析基盤上で行われます。Databricks外へのデータの持ち出しが禁止されているため、データ分析やモデル構築もDatabricks上で行うことが必須となっています。そこで、本記事では「第1回金融データ活用チャレンジ」を題材に、EDA~モデル構築/管理までをDatabricksで実施する方法をご紹介したいと思います。提供するクラウド型の統合データ分析基盤です。データベースでのデータ管理からデータ分析/加工・機械学習モデルの構築/管理までを1つのブラウザ上で行うことができます。Lab6)https://jupyter.org/やColaboratory7)https://colab.research.google.com/の様にブラウザ上で動作する対話型実行環境でデータを分析することができます。分析したデータからGUIでグラフを作成できたり、mlflow8)https://mlflow.org/を用いての実験管理が容易であったりと、サクッとEDA~モデル作成ができる点が便利だと感じました。4_分析環境について.pdf)データDatabricksでの分析方法を紹介する前に、本コンペティションのデータについて説明します。本コンペティションでは教師データとして、1,144,674件の金融データが与えられています。教師データの期間は2019年8月~2021年10月であり、2021年11月のテストデータに対して住宅ローンの延滞確率を予測するタスクとなっています。顧客id(gid)のユニーク数は50,622人であり、その中で下図パターン12に該当する顧客は36,859人となっており、これらの顧客に対する予測を行います。教師データの中でtarget_flag=1となるデータは、下図パターン34に該当する顧客の最新基準年月のデータのみとなります。今回のコンペティションでは特徴量エンジニアリングやアルゴリズムだけではなく、不均衡データの扱い方によって大きくスコアが左右されそうです。DatabricksでのEDA本コンペティションでは各参加者アカウントに対してDatabricks上でtrain/testデータがテーブルに格納されて共有される形式でした。Databricks上では以下のコードでテーブルデータを読み込み、pandasのDataFrameに変換することができます。DataFrameの出力をGUIで操作することが可能になります。pandas.DataFrameのdescribe()メソッドでの基礎統計量の確認やmatplotlibを使用した可視化作業等が、GUIで実施できるイメージです。下図ではtarget_flag=0の割合が98.8%と非常に不均衡な正解ラベルであることがわかります。次に、seabornのdistplotを用いて各特徴量の分布を確認します。今回seabornはデフォルトで分析環境にインストールされていましたが、必要なライブラリはセル上で!pipを用いてインストールが可能です。amt系の特徴量、つまり資産残高や月のATM利用金額等に外れ値が含まれていることがわかりました。IQRの1.5倍を上下限としてクリップするなどの外れ値補間処理を入れることが考えられます。1での特徴量の分布の違いを確認しておきます。こちらの分布に大きな違いがある特徴量はターゲットを説明する際に有用な情報を持っていると考えられるのですが、今回はターゲットによる特徴量の分布に大きな差は見られませんでした。正解ラベル毎の特徴量の分布(抜粋)最後に、ローン開始日から延滞(target_flag=1)となるまでの期間を見てみます。default_loan_kikan_list.append(default_month)display(pd.DataFrame(default_loan_kikan_list))target_flag=1になるのはローン開始日から必ず1年以上経ってからということがわかりました。202011のデータのtarget_flagを全て0とする後処理を入れるとスコアアップが望めるかもしれません。mlflowでのモデル管理Databricksのメリットの1つは、mlflowがDatabricksのUIおよびノートブックと統合されていることで、学習結果をシームレスに確認できることだと思っています。GBMを用いて予測モデルを作成し、実験管理を行っていきたいと思います。Artifactsという構成でモデルが管理されています。DatabricksではExperimentにノートブック名が割り当てられます。Runはモデル学習時にwith句を用いて設定することができます。Run名を指定することで、1つのノートブック(Experiment)に複数のRunを紐づけて記録することが可能です。Runに対してモデルのパラメータ(Parameters)やvalidationスコア(Metrics)等を紐づけて記録することができます。実装例を以下に示します。auc)Databricksでは、mlflowの結果をGUI上で確認することができます。すると左のタブにエクスペリメントが追加されます。このエクスペリメントが先ほど実行したノートブックの名称となっています。エクスペリメントの中にRunがあり、Runの中にParameters等が記録されています。GBMの場合、Artifactsにfeature_importaceを自動で可視化してくれているため、matplotlibで可視化することなく重要度を確認することができます。Experimentsの中にあるRun。with句の実行毎に作成される。Runの中にParameter等が記録されている。Artifactsの中にfeature_importanceのグラフが自動生成される。Databricksでは、モデルをモデルレジストリに登録することでDatabricks内で簡単にモデルを呼び出すことが可能となります。IDとモデル名を用いてモデルレジストリに登録します。以下にモデル登録を行うコードを記載します。name=MODEL_NAME)モデルのロードと予測Databricksでは、前項で登録したモデルを簡単に呼び出して使用することができます。注意が必要な点があり、それはモデルのバージョン指定です。Mlflowでは1つのモデル名に対して、実行毎にバージョンを分けて保存することができます。したがって、呼び出し時にもモデル名に対してバージョンを指定する必要があります。以下に最新バージョンを取得してモデルを呼び出す方法を記載します。mlflow.pyfunc.load_model(model_version_uri)最後に予測ですが、こちらは先ほどロードしたモデルでpredictするだけです。CLIを用いて行うことができます。まとめ本記事では、「第1回金融データ活用チャレンジ」を題材に、Databricks上でEDA~モデル学習/管理までを行う方法をご紹介しました。私自身、本コンペティションで初めてDatabricksを触りましたが、データの統計量を自動で可視化したり、mlflowを用いてシームレスに実験管理ができたりするため、特徴量エンジニアリングやアルゴリズムの構築に時間を割くことができるようになると感じました。可視化やモデル管理のハードルが下がることで、データ分析に携わる人が増えると嬉しいです。今後もコンペティション等で利用する機会が増えてきそうなため、引き続き注目していこうと思います。次回は本コンペティションの具体的な解法について記事を書く予定のため、ご興味を持っていただけた方は次回もお楽しみにお待ちください。