生存分析は顧客の離脱や継続を分析するための強力な手法ですが、必要なデータ形式に整形するのが難しい場合があります。
この記事では、キャンセル情報が明示されていない支払いデータから、生存分析に必要なデータを作成する方法を解説します。
生存分析には「開始日」「終了日」「キャンセルしたかどうか」の情報が必要ですが、実際のビジネスデータではキャンセル情報が明示的に記録されていない場合が多くあります。
生存分析を行うためには、1行が1ユーザーとなっており、「開始日」「終了日」「イベント(キャンセルしたかどうか)」という情報が必要です。
しかし、実際のビジネスデータでは、これらの情報が直接的に記録されていないことが多いです。
例えば、サブスクリプションサービスの支払いデータでは、顧客が支払いを行った日付は記録されていますが、「キャンセルした」という情報は明示的には記録されていないことがあります。また、顧客ごとに複数の支払い記録が存在するため、1行1ユーザーの形式になっていません。
このような場合、支払いデータを加工して生存分析用のデータを作成する必要があります。具体的には以下の手順で行います:
特に注意が必要なのは、最後の支払い日がそのまま利用終了日にはならないという点です。例えば、1ヶ月単位の契約であれば、最後の支払いから1ヶ月間はサービスを利用できるため、契約終了日は最後の支払い日の1ヶ月後となります。
また、キャンセルの判定には、「今日」を基準にするか「データ上の最終日」を基準にするかという選択肢があります。データが最新であれば「今日」を基準にしますが、過去のデータを分析する場合は「データ上の最終日」を基準にします。
今回は1行が1支払いを表し、各行には顧客ID、支払い日などの情報が含まれている支払いデータを使用します。1人の顧客に対して複数の支払い記録があるため、このままでは生存分析に利用できません。
まず、1行1顧客のデータにするために、顧客IDごとに最初の支払い日と最後の支払い日を集計します。
顧客IDの列ヘッダーメニューから「集計」を選択します。
集計のダイアログが表示されたら、グループには顧客IDが既に選択されていることを確認のうえ、値に「支払い日」の列を選択し、集計関数を「最初の日(MIN)」に変更します。
列名を「契約開始日」に変更するために、編集ボタンをクリックし、新しい列名を入力してOKボタンをクリックします。
次に、2つ目の値の箇所をクリックして再度「支払い日」列を選択し、集計関数に「最後の日(MAX)」を選択します。
列名を「最後の支払い日」に変更します。
結果を確認するためにプレビューボタンをクリックし、顧客ごとに最初の支払い日と最後の支払い日が集計されていることを確認します。
実行ボタンをクリックして集計を完了します。これにより、元のデータが1行1顧客の形式に変換されました。
次に、最後の支払い日から契約終了日を計算します。契約終了日は「最後の支払い日の1ヶ月後の前日」とします。
最後の支払い日の列ヘッダーメニューから「計算を作成」の「標準」を選択します。
計算を作成のダイアログが表示されたら、以下の計算式を入力します:
最後の支払い日 %m+% months(1) %m-% days(1)
この計算式の意味は以下となります。
%+m%
や%m-%
は日付計算の演算子で、月末など存在しない日付を適切に処理しますmonths(1)
は1ヶ月後の日付を計算しますdays(1)
は1日を引きます新しい列名を「契約終了日」として入力し、実行ボタンをクリックします。
これにより、最後の支払い日から1ヶ月後の前日が契約終了日として計算されました。例えば、最後の支払い日が2021年10月10日の場合、契約終了日は2021年11月9日となります。
最後に、契約終了日からキャンセルしたかどうかを判定します。
「契約終了日」の列ヘッダーメニューから「計算を作成」の「標準」を選択します。
計算を作成のダイアログが表示されたら、以下の計算式を入力します:
契約終了日 <= max(c(`契約開始日`, `最後の支払い日`), na.rm = TRUE)
この計算式では、契約終了日がデータ上の最終日(全顧客の支払い日の最大値)よりも前かどうかを判定しています。前であれば、その顧客は契約を更新しなかった(キャンセルした)と判断できます。
新しい列名を「キャンセル」として入力し、実行ボタンをクリックします。
これにより、キャンセルしたかどうかを示す論理型(TRUE/FALSE)の列が作成されました。「TRUE」はキャンセルした顧客、「FALSE」はキャンセルしていない(データ最終日時点で契約中)顧客を表します。
サマリビューに移動すると、キャンセルした顧客数とキャンセルしていない顧客数を確認できます。
これで生存分析(コホート分析)用のデータを作成できました。