Microsoftが提供しているSaaS型のサービスであるMicrosoft Fabricを使用して、機械学習を用いた予測レポートを作成してみたいと思います。
本記事は、Microsoft Learnの以下の記事を参考に作業していきます。
データ サイエンス チュートリアル - 概要 - Microsoft Fabric | Microsoft Learn
過去の回の記事は以下となります。 blog.jbs.co.jp blog.jbs.co.jp
作業の概要
用意されたノートブックを使用して、以下の内容のことを実施していきます。
事前準備前編で実施データの取得前編で実施データの加工(クレンジング)と保存前編で実施機械学習モデルのトレーニングと登録中編で実施- 予測データの作成
- 予測データの視覚化(レポート作成)
「公開されているテストデータ(銀行の顧客データ)をもとに、機械学習モデルを使用して、顧客の解約状況を予測を立てる」というのが目的となっています。
この後編記事では、機械学習モデルのトレーニングと、登録から予測データの視覚化(レポート作成)までを行います。
予測データの作成
作業内容
マイワークスペースから4-predictを表示します。
このノートブックでは以下のようなことを行います。
- 3で作成したテストデータの読み込み
- 予測データの作成 (2通りの手法)
- レイクハウスに予測データの保存
「すべて実行」を選択します。
最後のコードまで完了したら、レイクハウス内で作成された予測データのテーブル(customer_churn_test_predictions)が確認できます。
予測データの作成方法
ノートブック内では、2通りの方法で予測データの作成を行います。
最後にテーブルとして保存される(レポートで使用する)のは、 SynapseML の Transformer API を使用した方の予測データとなります。
SynapseML の Transformer API を使用したデータ作成
MLFlowTransformer オブジェクトを作成して DataFrame を指定し、予測データを作成します。
from synapse.ml.predict import MLFlowTransformer model = MLFlowTransformer( inputCols=list(df_test.columns), outputCol='predictions', modelName='lgbm_sm', modelVersion=1 ) import pandas predictions = model.transform(df_test) display(predictions)
Spark SQL API を使用したデータ作成
Spark SQL API を使用して PREDICT 関数を呼び出し、データを作成します。
from pyspark.ml.feature import SQLTransformer # Substitute "model_name", "model_version", and "features" below with values for your own model name, model version, and feature columns model_name = 'lgbm_sm' model_version = 1 features = df_test.columns sqlt = SQLTransformer().setStatement( f"SELECT PREDICT('{model_name}/{model_version}', {','.join(features)}) as predictions FROM __THIS__") # Substitute "X_test" below with your own test dataset display(sqlt.transform(df_test)) from pyspark.sql.functions import col, pandas_udf, udf, lit # Substitute "model" and "features" below with values for your own model name and feature columns my_udf = model.to_udf() features = df_test.columns display(df_test.withColumn("predictions", my_udf(*[col(f) for f in features])))
予測データの視覚化(レポート作成)
作業内容
レポート作成前の準備
マイワークスペースから、使用しているレイクハウスのSQL分析エンドポイントを選択します。 customer_churn_test_predictionsを、既定のセマンティックモデルへ追加します。 「新しいメジャー」をクリックして、レポート用のメジャーを追加します。 以下の5つのメジャーを追加します。
- 予測される平均解約率:
Churn Rate = AVERAGE(customer_churn_test_predictions[predictions])
- 合計顧客数:
Customers = COUNT(customer_churn_test_predictions[predictions])
- ドイツの解約率:
Germany Churn = CALCULATE(customer_churn_test_predictions[Churn Rate], customer_churn_test_predictions[Geography_Germany] = True)
- スペインの解約率:
Spain Churn = CALCULATE(customer_churn_test_predictions[Churn Rate], customer_churn_test_predictions[Geography_Spain] = True)
- フランスの解約率:
France Churn = CALCULATE(customer_churn_test_predictions[Churn Rate], customer_churn_test_predictions[Geography_France] = True)
追加されると、列の末尾に表示されます。
レポートの作成
「新しいレポート」を選択します
右上のテキストボックスのアイコンを選択して、レポートのタイトルを入力します。 今回は「テストレポート」と入力しています。
今回作成するレポートでは以下の5つの表を作成し、一つのダッシュボードとして確認ができるようにします。
- 解約率
- 年齢別の顧客数と解約率
- 購入した商品数毎の解約率と顧客数
- NewCreditScoreと解約率
- 国別の解約率
解約率を表示する表を作成します。 視覚化で「カード」を選択しデータで「Churn Rate」にチェックを入れると、フィールドに選択した項目が追加され、レポート部分に追加したビジュアルが表示されます。
Churn Rate は解約率を表していますが、そのままでは%表記になっていません。 レポートとして見栄えが悪いので、%表示に修正します。 先ほど追加されたChurn Rateを右クリックし「新しいビジュアル計算」を選択します。 以下のようにボックスに入力し、チェックマークをクリックします。
Calculation = [Churn Rate]*100&"%"
%で表示されるようになりました。
年齢別の顧客数と解約率の表を作成します。 視覚化で「折れ線グラフおよび積み上げ縦棒グラフ」を選択し、データから「Age」をX軸、「Churn Rate」を列のY軸、「Customers」を線のY軸にドラック&ドロップします。
購入した商品数毎の解約率と顧客数の表を作成します。 視覚化で「折れ線グラフおよび積み上げ縦棒グラフ」を選択し、データから「NumOfProducts」をX軸、「Churn Rate」を列のY軸、「Customers」を線のY軸にドラック&ドロップします。
NewCreditScoreと解約率の表を作成します。 視覚化で「積み上げ縦棒グラフ」を選択し、データから「NewCreditScore」をX軸、「Churn Rate」をY軸にドラック&ドロップします。
国別の解約率の表を作成します。 視覚化で「集合縦棒グラフ」を選択し、データから「Germany Churn」「Spain Churn」「France Churn」をY軸にドラック&ドロップします。
最後に作成した表をドラッグ&ドロップするなどして大きさや位置を調整します。
作成したレポートから読み取れること
- 25~50歳くらいの顧客が多く、45歳くらいから解約率が高くなる。 (左上の表)
- 3つ以上の商品を購入している顧客は全体から見て少ないにもかかわらず、解約率が高い。 (左下の表)
- クレジットスコアが低い顧客ほど解約率が高い傾向がある。 (右上の表)
- ドイツの顧客は解約率が他の国よりも高い。 (右下の表)
まとめ
今回の記事では機械学習による予測データの作成とそれを使用したレポートの作成を実施しました。
全3回に渡って、データの取り込みから機械学習による予測データの作成と、それを利用したレポートの作成まで一通りの流れを体験できました。
初心者の方や、一連の流れを知りたいといった方の参考になれば幸いです。