クレジットカードの取引データを使用した顧客セグメンテーションのマスタリング

'クレジットカードの取引データを利用した顧客セグメンテーションの習得'

RFMスコアを使用して顧客セグメントを作成する

Andrea Piacquadioによる画像、Pexels

顧客セグメンテーションとは、過去の購買パターンに基づいて顧客セグメントを特定するプロセスです。たとえば、リピート/ロイヤル顧客、高額購買顧客、一度またはまれな購入を行う顧客などを特定することが含まれます。購入頻度、取引金額、購入日などの情報を使用してセグメントを作成することができます。これらの特性を使用して、解釈しやすい特性を持つ明確に定義されたクラスタを生成することができます。

これらのセグメントの特性は、企業にとって多くの情報とビジネス価値を提供することができます。たとえば、企業は、ターゲットとなる顧客セグメントに対して収益を増やすためのターゲットプロモーションメッセージング、顧客維持キャンペーン、ロイヤリティプログラム、製品クロスセリングなどを通じてこれらのセグメントを使用することができます。企業は、それぞれのセグメントに関連するメッセージングを使用して、カスタマイズされたメッセージングで顧客セグメントをターゲットにすることができます。さらに、これらのセグメントは、顧客が最も反応しやすいチャネル(メール、ソーシャルメディア、外部アプリケーションなど)に関する情報を提供することができます。企業はまた、消費者セグメントを使用してアップセルやクロスセルを行うこともできます。たとえば、頻繁に購入されるアイテムには高価なオプションを提供したり、以前に購入されたアイテムに対して補完的な製品を提供したりすることができます。これらの戦術は、収益と顧客維持を増やすために使用することができます。

顧客セグメンテーションにはさまざまな技術が使用されています。顧客セグメントを生成するための人気のある技術の1つは、最新性、頻度、金銭価値(RFM)スコアです。

最新性、頻度、金銭価値

  1. 最新性は、顧客が最後に購入した日と参照日(通常はデータで使用可能な最新または最大の日)の間の日数です。
  2. 頻度は、顧客が最後の購入日とデータで使用可能な最新または最大の日の間の購入回数です。
  3. 金銭価値は、顧客の最初の購入日と最後の購入日の間に費やされた合計金額です。

これらの値を使用して、RFMスコアを作成し、高い価値と低い価値の顧客をセグメント化および特定することができます。これらのスコアは、カスタムマーケティング、離反分析、価格最適化など、さまざまなビジネスユースケースに使用することができます。

ここでは、クレジットカード取引データセットを使用してRFMスコアを計算する方法を見ていきます。目的のために、DataFabricaで入手可能な合成クレジットカード取引データを使用します。このデータには、合成クレジットカードの取引金額、クレジットカード情報、取引IDなどが含まれています。無料版はApache 2.0ライセンスのもとでダウンロード、変更、共有が可能です。

この作業では、実行可能な再現可能な実験を行いやすくする共同データサイエンスノートブックであるDeepnoteでコードを書きます。

データの探索

まず、Deepnoteに移動して新しいプロジェクトを作成しましょう(アカウントをまだお持ちでない場合は無料でサインアップできます)。

必要なパッケージをインストールしましょう:

著者によって作成された埋め込み

使用するパッケージをインポートしましょう:

著者によって作成された埋め込み

次に、データをpandasのデータフレームに読み込んで最初の5行を表示しましょう:

著者によって作成された埋め込み

次に、Chick-fil-Aを購入した顧客のみを含むデータフレームにフィルタリングしましょう:

著者によって作成された埋め込み

次に、各州の顧客数を見てみましょう。これには、merchant_stateを州の略語にマップする必要があります。これにより、Plotlyで各州の顧客数をプロットすることができます:

著者によって作成された埋め込み

次に、州の略語をマップし、state_countテーブルを定義しましょう。これを行うには、各カードホルダーの各州のgroupby nunique()操作を実行します:

df['merchant_state_abbr'] = df['merchant_state'].map(state_abbreviations)state_counts = df.groupby('merchant_state_abbr')['cardholder_name'].nunique().reset_index()state_counts.columns = ['State', 'Customer_Count']

次に、Plotly Expressのchloroplethメソッドを使用して、各州の顧客数の地理プロットを生成します:

fig = px.choropleth(state_counts, locations='State', locationmode='USA-states', color='Customer_Count', scope='usa', color_continuous_scale='Blues', title='州ごとの顧客数')fig.show()

フルのロジックは次のとおりです:

作成者による埋め込み

RFMスコアの生成

さて、RFMスコアを作成するためのロジックを定義しましょう。まず、transaction_dateをpandasのdatetimeオブジェクトに変換し、最大のtransaction_dateであるNOW変数を定義します:

df['transaction_date'] = pd.to_datetime(df['transaction_date'])NOW = df['transaction_date'].max()

次に、recency、frequency、monetary valueを計算するためのグループバイ集計操作を行います。

  1. Recency — 最大の日付から最大の顧客日付を引いた値:df.groupby('cardholder_name').agg({'transaction_date': lambda x: (NOW — x.max()).days})
  2. Frequency — 各顧客のトランザクションIDの数:df.groupby('cardholder_name').agg({'transaction_id': lambda x: len(x)})
  3. Monetary value — 各顧客のトランザクション金額の合計:df.groupby('cardholder_name').agg({'transaction_amount': lambda x: x.sum()})

また、recencyに変換されたtransaction_dateを整数に変換します:

rfmTable = df.groupby('cardholder_name').agg({'transaction_date': lambda x: (NOW - x.max()).days, 'transaction_id': lambda x: len(x), 'transaction_amount': lambda x: x.sum()})rfmTable['transaction_date'] = rfmTable['transaction_date'].astype(int)

次に、適切な列名に変更します。

  1. transaction_daterecencyに変更
  2. transaction_idfrequencyに変更
  3. transaction_amountmonetary_valueに変更
rfmTable.rename(columns={'transaction_date': 'recency', 'transaction_id': 'frequency', 'transaction_amount': 'monetary_value'}, inplace=True)rfmTable = rfmTable.reset_index()

フルのロジックは次のとおりです:

作成者による埋め込み

recencyの分布を見ることができます:

作成者による埋め込み

Frequency:

作成者による埋め込み

Monetary value:

作成者による埋め込み

次に、recency、frequency、monetary valueの四分位数を計算します:

rfmTable['r_quartile'] = pd.qcut(rfmTable['recency'], q=4, labels=range(1,5), duplicates='raise')rfmTable['f_quartile'] = pd.qcut(rfmTable['frequency'], q=4, labels=range(1,5), duplicates='drop')rfmTable['m_quartile'] = pd.qcut(rfmTable['monetary_value'], q=4, labels=range(1,5), duplicates='drop')rfm_data = rfmTable.reset_index()

次に、recencyとfrequencyの値に対応する顧客の割合を表示するヒートマップを可視化します。まず、割合を計算します:

heatmap_data = rfm_data.groupby(['r_quartile', 'f_quartile']).size().reset_index(name='Percentage')heatmap_data['Percentage'] = heatmap_data['Percentage'] / heatmap_data['Percentage'].sum() * 100

次に、ヒートマップ行列を生成します:

heatmap_matrix = heatmap_data.pivot('r_quartile', 'f_quartile', 'Percentage')

SeabornとMatplotlibを使用してヒートマップを生成し、ラベル/タイトルを付けます:

sns.set()sns.heatmap(heatmap_matrix, annot=True, fmt=".2f", cmap="YlGnBu")plt.title("顧客セグメンテーションヒートマップ")plt.xlabel("Frequency Quartile")plt.ylabel("Recency Quartile")plt.show()

全体のロジックは次の通りです:

埋め込み作成者によって作成されました

私たちはヒートマップから以下の洞察を得ることができます:

  1. 16.21%の顧客は最近まれに購入しました。
  2. 3.45%の顧客は頻繁に購入し、最近の顧客です。
  3. 10%の顧客は頻繁に購入しますが、長い間ではありません。
  4. 5.86%の顧客は最近購入せず、頻繁に購入しません。

ここでは、単一の商人であるチックフィレイのみを考慮していますが、他のカジュアルや高級ダイニングの商人に対してもこの分析を繰り返すことをお勧めします。

次に、最終的なRFMスコアを生成するために、最終日、頻度、金銭価値の四分位数を連結することができます:

埋め込み作成者によって作成されました

そして、RFMスコアの分布を可視化することができます:

埋め込み作成者によって作成されました

ここで、最も一般的なRFMスコアは「411」であり、これは最近の顧客であり、頻繁に購入せず、非常に少ない金額を使うことに対応しています。

RFMスコアを使用した顧客セグメントの生成と可視化

次に、顧客セグメントを生成します。このステップは多少主観的ですが、次のようにセグメントを定義します:

  1. プレミアム顧客:r、f、およびmがすべて≥ 3
  2. リピート顧客:f≥3且つrまたはm≥3
  3. トップスペンダー:m≥3且つfまたはr≥3
  4. リスクのある顧客:r、f、およびmの2つ以上≤2
  5. 非アクティブな顧客:2つ以上= 1
  6. その他:それ以外のすべて

埋め込み作成者によって作成されました

次に、セグメントの分布を見ることができます:

埋め込み作成者によって作成されました

ここでは、最も大きな顧客セグメントは非アクティブな顧客であり、次にリスクのある顧客、トップスペンダー、リピート顧客、プレミアム顧客です。

そして、分布を可視化することもできます:

埋め込み作成者によって作成されました

また、各顧客セグメントの平均金銭価値も見ることができます:

埋め込み作成者によって作成されました

プレミアム顧客、リピート顧客、およびトップスペンダーの平均金銭価値が最も高く、非アクティブおよびリスクのある顧客は金銭価値が低いです。

各顧客セグメントの平均頻度値:

埋め込み作成者によって作成されました

プレミアム顧客、リピート顧客、およびトップスペンダーが最も頻度が高く、リスクのある顧客と非アクティブな顧客は頻度が低いです。

最後に、各顧客セグメントの平均最終日値:

埋め込み作成者によって作成されました

「その他」のカテゴリが最も最近の購入をしていることがわかります。これは、購入パターンがはっきりしない「新しい」顧客のための良いセグメントかもしれません。

カスタムマーケティングにおける顧客セグメントの使用

これらの顧客セグメントを使用して、各セグメントに関連するカスタマイズされたマーケティングメッセージを生成することができます。たとえば、プレミアム顧客には特別なプロモーションやロイヤリティディールを提供することができます。購入履歴に基づいて、彼らが興味を持つ可能性のある他の商品もプロモートすることができます。リピート/ロイヤル顧客には、自動化されたメールキャンペーンを開発して忠誠心を保つことができます。リスクのある顧客は通常興味を示さないため、これらの顧客に基づいてキャンペーンを開発し、再び購入させることができます。非アクティブな顧客にも同様のキャンペーンを開発することができます。最後に、トップスペンダーには、彼らが再び購入する可能性が高い高価な製品に特別なプロモーションやディールを提供することができます。

このデータを使用して、itemspricesのフィールドを使用して、これらのセグメントのためにカスタマイズされたマーケティングキャンペーンを作成することができます。

GitHubからコードをダウンロードして、他のレストラン商人に対して自分自身でこの分析を繰り返すことをお勧めします。

結論

ここでは、合成クレジットカードのトランザクションデータに対して顧客セグメンテーションを行う方法について説明しました。まず、チックフィレイの商人ごとに各州の顧客数を調査するための簡単なデータ探索を行いました。次に、RFMスコアの生成に必要な列を計算しました。そして、各顧客の最終日、頻度、金銭価値の四分位数を生成し、それを使用してRFMスコアを作成しました。次に、データ全体で顧客セグメントの分布を分析できる視覚化を生成しました。

RFMスコアを使用して洞察に富んだ顧客セグメントを生成することは、ビジネス価値を提供したいデータサイエンティストにとって貴重なスキルです。解釈可能なセグメントの構築とこれらのセグメントからの洞察を引き出すことで、ビジネスは収益と顧客維持率を向上させるためのマーケティングキャンペーン戦略を設計することができます。顧客の購買行動を理解することで、ビジネスは適切な顧客層にプロモーションオファーを適用することができます。この記事では、はじめるために必要な基礎知識を提供します!

合成クレジットカードデータの無料版はこちらから入手できます。完全なデータセットはこちらから見つけることができます。

We will continue to update VoAGI; if you have any questions or suggestions, please contact us!

Share:

Was this article helpful?

93 out of 132 found this helpful

Discover more