Skip to content

IBMDeveloperTokyo/credit-card-campaign-response-prediction

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 

Repository files navigation

クレジットカートのキャンペーン反応予測

本ハンズオンでは、クレジットカードの利用履歴と、顧客の属性、過去実際にキャンペーンを行った際の反応実績をサンプルデータとして使用し、予測モデルを作成します。 その後、現在の顧客情報を当てはめることで次回キャンペーンを行った場合の反応確度を予測します。 得られる予測結果を元に費用対効果を最大にするターゲットリストを作成します。

image

本ハンズオンを通じて、1からこのストリーム(完成版ストリームファイル.str)を作成していきます。
image

1. プロジェクトの作成

Watson Studioのホーム画面で、プロジェクトの作成をクリックします。
image

プロジェクトの作成画面で、空のプロジェクトを作成をクリックします。
image

新規プロジェクトの画面で、名前欄にDojoを入力します。
画像の様に①ストレージ・サービスの選択と表示されている場合は、「追加」がリンクとなっていますのでクリックしてください。
ストレージと表示され、ストレージ名が既に入力されている場合は、右下の作成をクリックし、以降のストレージ作成の手順はスキップしてください。
image

Cloud Object Storageの作成画面が表示されたら、料金プランの中から、ライトプランを選択し、作成をクリックします。
※自動でプロジェクト作成画面に戻ります
image

先ほどのプロジェクト作成画面でストレージ欄にストレージ名が入っていることを確認して、作成をクリックします。
image

以下の様にプロジェクトのホーム画面が表示されたら、プロジェクトの作成完了です。
image

2. 資産の作成

資産タブに切り替えて、新規資産をクリックします。
image

新規資産画面が表示されたら、検索フィールドにモデラー・フローと入力し、Graphical canvasに表示されるモデラー・フローをクリックします。
image

SPSS Modeler Flowの作成画面が表示されたら、以下の通り設定しCreateをクリックします。

フィールド 設定値
Name Hands-on
環境定義 Default SPSS Modeler S(2 vCPU 8GB RAM)

image

少し待つと、SPSS Modeler Flowが利用できる様になります。
image

3. データの読み込み

このリポジトリをダウンロードし、dataフォルダに入っている以下のCSVファイルをすべて画面右側の点線で囲まれた部分にドラッグ&ドロップします。

ファイル名
顧客属性_実績.csv
顧客属性_予測.csv
反応_実績.csv
利用履歴_実績.csv
利用履歴_予測.csv

image

インポートパレットから、データ資産ノードをフロー・キャンバスにドラッグ&ドロップします。
image

データ資産ノードをダブルクリックまたは、右クリックし開くをクリックします。
image

データ資産の選択画面が表示されたら、データ資産 > 利用履歴_実績.csvと選択し、選択をクリックします。
image

何も変更せず保存をクリックします。
image

先ほど配置したノードの名前が利用履歴_実績.csvに自動で切り替わります。
image

同様の手順で、顧客属性_実績.csv反応_実績.csvをフロー・キャンバスに追加します。
image

余裕のある方は、任意のノードを右クリックして、プレビューを選択してみてください。
読み込んだデータの中身を画面上で確認することができます。
image

4. データ加工(フラグ設定)

利用履歴データを顧客毎・用途毎に「使った/使わなかった」のフラグに変換し、縦持ちのデータを横持ちに簡単に変換します。
image

利用履歴(実績)のデータ型を読み込みます。
フィールド操作パレットから、タイプノードをフロー・キャンバスにドラッグ&ドロップし、利用履歴_実績.csv → タイプと接続します。
image

ノード同士の接続方法
接続元のノードにマウスカーソルを置くと、>マークが表示されます。
>マークをドラッグし接続先のノードの上で離すとノードの接続ができます。
index

タイプノードをダブルクリックまたは、右クリックし開くをクリックします。
値の読み込みをクリックし、読み込みが完了したら保存をクリックします。
image

フィールド操作パレットから、フラグ設定ノードをフロー・キャンバスにドラッグ&ドロップし、タイプ → フラグ設定と接続します。
image

フラグ設定ノードをダブルクリックまたは、右クリックし開くをクリックします。
セット型フィールドは用途を選択し、値の追加をクリックします。
image

全てのチェックボックスをONにしてOKをクリックします。
image

集計キーをONにして列の追加をクリックします。
image

顧客番号をONにしてOKをクリックします。
image

保存をクリックします。
image

データの加工が意図した通りにできているか確認をします。
出力パレットから、ノードをフロー・キャンバスにドラッグ&ドロップし、フラグ設定 → 表と接続します。
image

表ノードを右クリックし実行をクリックします。
少し待つと、画面右側に出力の実行結果が表示されるので、一番上の出力結果をクリックします。
image

実行結果は、右上にある赤枠のアイコンをクリックし、出力タブに切り替えることで確認できます。
image

上手く顧客番号毎にどの用途で利用したかを横持ちのテーブルに変換できました。
image

5. データ加工(レコード結合)

先ほど作成した利用履歴フラグと、顧客属性・反応を顧客番号をキーに1つに結合します。
image

レコード操作パレットから、マージノードをフロー・キャンバスにドラッグ&ドロップし、
フラグ設定 → マージ
顧客属性_実績.csv → マージ
反応_実績.csv → マージ
と接続します。
image

マージノードをダブルクリックします。
マージ法にキーを選択し、列の追加をクリックします。
image

顧客番号をONにし、OKをクリックします。

それぞれの入力データに顧客番号が含まれているので複数表示されていますが、どれを選んでも問題ありません。

image

保存をクリックします。
image

再度、マージノードによって得られるデータが意図したものか確認するため、一度表ノードに出力します。
ノードを使い回しするため、先ほど使用したフラグ設定と表の接続を解除してください。

ノードの接続解除方法
削除したい接続(→)を右クリックし、削除をクリックすると接続が解除できます。
image

接続の解除ができたら、マージ → 表と接続します。
image

表ノードを右クリックし実行をクリックします。
少し待つと、画面右側に出力の実行結果が表示されるので、一番上の出力結果をクリックします。
image

上手く顧客番号をキーに3つのテーブルを結合できました。
image

マージは、キーとなる項目が必要です。
各入力データでキーとなる項目名は同じである必要があります。
キー項目の名称が異なる場合はマージの前に項目名を変更するノード(フィルターノード)を使用します。
例)cutomer_number → 顧客番号など

6. データ加工(特徴量抽出)

生データから、予測に役立つ特徴量を抽出します。
生年月日そのものはキャンペーン反応に影響を及ぼさないが、年齢は影響を及ぼすだろう、というデータや業務に対する知識が必要です。
適切なデータを利用して適切な特徴量を設定することが、予測分析の精度を向上するための最も有効な方法です。
今回は、生年月日から2022年3月1日時点での年齢を算出します。
image

フィールド操作パレットから、フィールド作成ノードをフロー・キャンバスにドラッグ&ドロップし、
マージ → フィールド作成
フィールド作成 → 表
と接続し直します。

既存の接続間にノードを追加したい場合、→の上に追加したいノードをドラッグ&ドロップすることで簡単に追加することができます。
image

image

フィールド作成ノードをダブルクリックし、派生フィールド名に生成する列名として年齢と入力します。
式の下にあるアイコンをクリックし、年齢を算出する式を作成します。
image

式ビルダーが表示されたら、関数をクリックし、date_years_difference関数をダブルクリックします。
式に関数式が自動で挿入されます。
image

関数式に使用する1つ目の項目を選択します。
フィールドをクリックし、生年月日をダブルクリックします。
式に関数式が自動で挿入されます。
image

関数式に使用する2つ目の項目を入力します。
式のテキストボックスをクリックし、?'2022-03-01'に書き換えます。
OKをクリックします。
ノード名が自動で年齢に変わります。
image

式が下記画像の状態になっていることを確認してください。
image
違っていた場合、手入力も可能なので以下の式へ修正してください。

date_years_difference('生年月日', '2022-03-01')

表ノードを右クリックし実行をクリックします。
少し待つと、画面右側に出力の実行結果が表示されるので、一番上の出力結果をクリックします。
image

生年月日から、2022年3月1日時点での年齢が算出できました。
image

今回の様な「生年月日から年齢を算出」などの算出処理では主に、フィールド追加ノードを利用します。
式には、条件分岐などを設定して複雑な計算をすることも可能です。

ここまでで、データの加工は完了です。

7. データ視覚化(データ検査)

集約・結合・特徴量抽出などがひとまず出来た段階でデータの可視化を行い、データ加工が適切か確認します。

出力パレットから、データ検査ノードをフロー・キャンバスにドラッグ&ドロップし、年齢 → データ検査と接続します。
image

データ検査ノードを右クリックし実行をクリックします。
image

少し待つと、画面右側に出力の実行結果が表示されるので、一番上の出力結果をクリックします。
各項目のグラフ描画・基本的な統計量算出・欠損値の検査を網羅的に行い、想定外の値・分布・欠損値が確認できます。
image

8. データ視覚化(散布図)

次に、複数の項目間の関連を視覚化して確認します。

グラフパレットから、散布図ノードをフロー・キャンバスにドラッグ&ドロップし、年齢 → 散布図(ノード名が?v. ?になっています)と接続します。
image

散布図ノード(ノード名が?v. ?になっています)をダブルクリックし、散布図セクションでX軸Y軸に使用する項目を選択します。

Xフィールド Yフィールド
年齢 年収

image

オーバーレイセクションで色にキャンペーン反応を選択し、保存をクリックします。
image

散布図ノード(ノード名が年齢v. 年収になっています)を右クリックし実行をクリックします。
image

少し待つと、画面右側に出力の実行結果が表示されるので、一番上の出力結果をクリックします。
グラフからデータの抽出範囲を検討し、今回のキャンペーンのターゲットを20〜50代・年収200万以上に設定します。
image image

レコード操作パレットから、選択ノードを年齢ノードと表ノードの間にドラッグ&ドロップし、
年齢 → 選択
選択 → 表
と接続し直します。
image

条件に以下の式を貼り付けて、保存をクリックしてください。

'年齢' >= 20 and '年齢' <= 60 and '年収' >= 2000000 and '年収' <= 10000000

image

余裕のある方は年齢年齢v. 年収の間に選択ノードをコピーして、目的の領域が抽出できていることをグラフで確認してみてください。
image

9. パターン発見(アソシエーション)

膨大な組み合わせの項目間の関連性の中から、特徴的なルールを探し出します。
併売分析、マーケットバスケット分析とも呼ばれ、主にクロスセリングに活用されます。

フィールド操作パレットから、タイプノードをフロー・キャンバスにドラッグ&ドロップし、選択 → タイプと接続します。
タイプノードをダブルクリックします。
image

値の読み込みをクリックし、ロールを以下の通り設定して保存をクリックします。

フィールド ロール
顧客番号 レコードID
各用途_ 両方
上記以外 なし

image

モデル作成パレットから、Aprioriノードをフロー・キャンバスにドラッグ&ドロップし、タイプ → Apriori(ノード名が7フィールドになっています)と接続します。
Aprioriノードを右クリックし、実行をクリックします。
image

Aprioriのモデルナゲットが生成されたら、右クリックしモデルの表示をクリックします。
image

モデルの詳細が表示されたら、ルールを選択します。
1行目は以下のルールを表しています。

項目 説明 計算式
サポート 全体の中で、通信販売・ETC・飲食店を利用する顧客は約10% (前提条件を満たしたレコード÷全レコード)の値
確信度 通信販売・ETC・飲食店を利用する顧客のうち、宿泊施設も利用する顧客の割合は約86% (前提条件と結果を満たしたレコード÷前提条件を満たしたレコード)の値
ルール・サポート 全体の中で、通信販売・ETC・飲食店・宿泊施設を利用する顧客は約9% (前提条件と結果を満たしたレコード÷全レコード)の値
リフト 通信販売・ETC・飲食店という前提条件をつけない場合(63%)と比較して、宿泊施設の利用割合は1.36倍(86%) (確信度÷結果を満たしたレコード÷全レコード)の値
デプロイアビリティー 通信販売・ETC・飲食店を利用し宿泊施設をまだ利用していない顧客が1.4%の倍率で通信販売・ETC・飲食店・宿泊施設を利用する顧客になる指標 ((前提条件を満たしたレコード - 前提条件と結果を満たしたレコード) ÷ 全レコード) × 100の値

image

先ほどタイプノードで設定したロールは、モデルのルールに対して以下の様な意味を持ちます。

ロール 説明
両方 前提条件と結果両方の候補
入力 前提条件の候補
ターゲット 結果の候補

10. 分類(セグメンテーション)

利用履歴が似ているグループ(クラスター/セグメント)に自動的に分類します。
クラスタリング、クラスター分析とも呼ばれ、顧客セグメント毎の施策立案などに活用されます。

フィールド操作パレットから、タイプノードをフロー・キャンバスにドラッグ&ドロップし、選択 → タイプと接続します。
タイプノードをダブルクリックします。
image

値の読み込みをクリックし、ロールを以下の通り設定して保存をクリックします。

フィールド ロール
顧客番号 レコードID
各用途_ 入力
上記以外 なし

image

モデル作成パレットから、K-Meansノードをフロー・キャンバスにドラッグ&ドロップし、タイプ → K-Meansと接続します。
K-Meansノードを右クリックし、実行をクリックします。
image

K-Meansのモデルナゲットが生成されたら、右クリックしモデルの表示をクリックします。
image

モデルの詳細が表示されたら、クラスターを選択します。
クラスター1は以下の様な特徴を持つことがわかります。

  • 旅行代理店は全く使わない
  • ETCと宿泊施設はよく使う
  • 百貨店はあまり使わない

image

次にクラスターの比較を選択します。
ここでは各用途毎に円の大きさでクラスター間の比較ができます。

image

11. 予測(教師あり学習)

教師あり学習の一種である、CART決定木を用いて予測モデルを作成します。 キャンペーン反応の確度が高いグループと低いグループに分岐していき、最終的に樹木の様に枝分かれした樹形図を作成します。

フィールド操作パレットから、パーティションノードをフロー・キャンバスにドラッグ&ドロップし、選択 → パーティションと接続します。
image

フィールド操作パレットから、タイプノードをフロー・キャンバスにドラッグ&ドロップし、パーティション → タイプと接続します。
image

タイプノードをダブルクリックし、値の読み込みをクリックします。
ロールを以下の通り設定して保存をクリックします。

フィールド ロール
顧客番号 レコードID
生年月日 なし
キャンペーン反応 ターゲット
データ区分 パーティション
上記以外 入力

image

モデル作成パレットから、C&R ツリーノードをフロー・キャンバスにドラッグ&ドロップし、タイプ→ C&R ツリーと接続します。
C&R ツリーノード(ノード名がキャンペーン反応になっています)を右クリックし、実行をクリックします。
image

C&R ツリーのモデルナゲットが生成されたら、右クリックしモデルの表示をクリックします。
image

モデルの詳細が表示されたら、ツリー図を選択します。
赤枠で囲った部分は、「航空会社・旅行代理店を使わず、ETC・宿泊施設を使う顧客のキャンペーンの反応確度は56%である」といったルールの集まりになります。
image

12. 学習とテスト

先ほど作成した予測モデルの予測精度を検証します。
パーティションノードによって実績データの一部を学習用に、残りをテスト用に分割して実施します。
image

出力パレットから、データ検査ノードをフロー・キャンバスにドラッグ&ドロップし、キャンペーン反応 → データ検査と接続します。
image

精度分析ノードをダブルクリックし、一致行列評価メトリックのチェックをONにして、保存をクリックします。
image

精度分析ノードを右クリックし、実行をクリックします。
少し待つと、画面右側に出力の実行結果が表示されるので、一番上の出力結果をクリックします。
image

学習・テストの両方に対して、正答率などを表示できます。
目標としている精度を達成しているかや、過学習(学習データに対しては予測精度が高いのに、テストデータに対しては精度が低いこと)が発生していないかの確認ができます。
image

13. オプション

フロー・キャンバスの処理内容をわかりやすくするため、コメントを追加することができます。
選択ノードをダブルクリックして、右上の鉛筆マークをクリックし年齢20代から50代、年収200万以上で条件抽出と入力したら、保存をクリックします。
こうすることで、フロー・キャンバス上のノード名が入力した内容に変わります。
どの様な条件で抽出を行っているか、一目でわかる様になりました。
image

フロー・キャンバス上の何もない場所で右クリックをし、新規コメントをクリックするとテキストボックスが追加されるので、学習:実績データから予測モデルを作成と入力します。
この様に、フロー・キャンバスのどの部分がどの様な処理を行うかを説明することができます。
image

以上で学習ステップは完了です。
image

14. 予測ステップ

学習ステップで行ったデータ加工と同じ処理を予測データに対して実施します。

データの読み込みステップと同様の手順で、利用履歴_予測.csv顧客属性_予測.csvをフロー・キャンバスに追加します。
image

学習ステップから、タイプフラグ設定マージ年齢選択ノードをまとめてコピー&貼り付けをします。
image

利用履歴_予測.csv → タイプ顧客属性_予測.csv → マージと接続します。
image

先ほどと同様に学習ステップから、モデルナゲットを全てコピー&貼り付けをします。
image

出力パレットから、ノードを3つフロー・キャンバスにドラッグ&ドロップし、
生成 → 各モデルナゲット
各モデルナゲット → 表
と接続します。
image

各表ノードを右クリックし、実行をクリックし予測結果を見てみます。
image

予測結果のフィールドはモデルの手法によって自動で命名・追加されます。
予測結果は画面への表示だけでなく、ファイルやRDBへ書き出すことも可能です。

  • パターン発見(アソシエーション)の予測結果 各顧客がルールに当てはまり、かつ、おすすめ商品をまだ利用していない場合に 、確度が高い順に3つのおすすめ商品を提示しています。 image

  • 分類(セグメンテーション)の予測結果 各顧客が分類されるクラスター(グループ)を提示しています。 image

  • 予測(教師あり学習)の予測結果 各顧客がキャンペーンに反応する予測値とその確度を提示しています。 予測値がTかつ確度が高い顧客から順に、次回キャンペーンのターゲットにすることで、限られたコストで最大限の効果をあげることができます。 image

以上で本ハンズオンは終了です。お疲れ様でした。

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published