スポンサーリンク

【Python】コホート分析によるリテンション率の把握

記事内に広告が含まれています。

コホート分析は、ユーザー行動の理解や製品の成長分析など、さまざまな分野で利用されるデータ分析手法の一つです。

この手法では、特定の基準や属性(例えば、登録日、初回購入日など)に基づいてユーザーグループ(コホート)を分類し、時間の経過とともにそのグループの行動やパフォーマンスの変化を追跡します。

コホート分析により、ユーザー行動のパターン、製品のリテンション率(維持率)、顧客の生涯価値(LTV)など、重要なインサイトを把握することができます。

Pythonでコホート分析を行うためには、主にpandasライブラリが用いられます。pandasを使用することで、データの読み込み、前処理、コホートの作成、コホートごとの行動追跡などが簡単に行えます。

以下に、簡単なサンプルコードを示します。この例では、ユーザーが初めて購入した月をコホートとし、各コホートが継続して購入する比率(リテンション率)を計算しています。

スポンサーリンク

サンプルデータ

以下のコードでサンプルデータを作成します。

import pandas as pd
import numpy as np

# サンプルデータの生成
np.random.seed(42)  # 結果の再現性のため

# ユーザーIDと注文日の組み合わせを生成
user_ids = np.random.randint(1, 500, 1000)
order_dates = pd.date_range(start='2023-01-01', periods=1000, freq='H').to_series()
order_dates = order_dates.sample(1000, replace=False).reset_index(drop=True)

# 購入金額を生成
amounts = np.random.randint(10, 500, 1000)

# DataFrameの作成
df = pd.DataFrame({
    'user_id': user_ids,
    'order_date': order_dates,
    'amount': amounts
})

# サンプルデータの出力
df.to_csv('sample_cohort_data.csv', index=False)
  • user_id: ユーザーID
  • order_date: 注文日
  • amount: 購入金額
スポンサーリンク

サンプルコード

作成したサンプルデータを使用したサンプルコードです。

import pandas as pd


# データ読込

df = pd.read_csv('sample_cohort_data.csv')

# 'order_date'をdatetime型に変換
df['order_date'] = pd.to_datetime(df['order_date'])

# コホートと注文月を定義
df['order_month'] = df['order_date'].dt.to_period('M')
df['cohort'] = df.groupby('user_id')['order_date'] \
                 .transform('min') \
                 .dt.to_period('M')

# コホートごとのユーザー数をカウント
cohort_data = df.groupby(['cohort', 'order_month']) \
                .agg(n_customers=('user_id', 'nunique')) \
                .reset_index(drop=False)

# コホートの生存期間を計算
cohort_data['period_number'] = (cohort_data.order_month - cohort_data.cohort).apply(lambda x: x.n)

# ピボットテーブルを作成してコホート分析のデータを整形
cohort_pivot = cohort_data.pivot_table(index='cohort',
                                       columns='period_number',
                                       values='n_customers')

# 初期ユーザー数で各セルを割り、リテンション率を計算
cohort_size = cohort_pivot.iloc[:,0]
retention_matrix = cohort_pivot.divide(cohort_size, axis=0)

# リテンション率の表示
print(retention_matrix)

このコードは、各ユーザーコホートが最初の購入から各月においてどのくらいの割合で購入を続けているかを示すリテンションマトリックスを計算しています。

顧客の忠誠度や製品・サービスの魅力が時間とともにどのように変化しているかを把握することが可能になります。

コード実行

実行結果

サンプルコードの実行結果は以下のとおりです。

period_number    0         1
cohort                      
2023-01        1.0  0.412698
2023-02        1.0       NaN

こちらのリテンションマトリックスからは、2023年1月と2023年2月に初めて購入したユーザー(コホート)を追跡した結果が示されています。

表のperiod_numberは、最初の購入からの経過月数を示しており、0は最初の月(コホートが形成された月)、1はその次の月を表します。

  • 2023-01コホート
    このコホートに属するユーザーは、最初の月(period_number = 0)に購入しており、リテンション率は100%(1.0)です。
    これは期待通りです。翌月(period_number = 1)には約41.27%のユーザーが再び購入しています。つまり、2023年1月に初めて購入したユーザーのうち、約41%が翌月にも購入を続けていることが分かります。
  • 2023-02コホート
    このコホートでは、最初の月(period_number = 0)に100%のユーザーが購入していますが、翌月(period_number = 1)のデータがNaN(データなし)となっています。
    これは、2023年2月に初めて購入したユーザーが、翌月には誰も購入していない、またはデータが不足していることを意味します。NaNの原因としては、データの収集期間が翌月まで継続していない、または翌月に購入が全くなかったことが考えられます。

考察

この分析から得られる主な洞察は以下のとおりです。

  • ユーザー維持の課題
    特に2023年1月のコホートにおいて、最初の月に購入したユーザーの約41%しか次の月には購入を続けていません。
    顧客が製品やサービスに対して継続的な関心を持ち続けることが難しいことを示唆しています。
  • データの欠如または継続性の問題
    2023年2月のコホートで翌月のデータがないことは、分析のためのデータ収集期間が不足しているか、顧客の維持が全く成功していない可能性を示唆しています。

これらの考察は、製品やサービスの改善、マーケティング戦略の調整、顧客エンゲージメントの向上策の検討に役立つ可能性があります。

特に、顧客がなぜ継続して購入しないのかを理解し、それに基づいて改善策を講じることが重要です。

スポンサーリンク
Python
著者SNS
タイトルとURLをコピーしました