解約予測

UnsplashのMantas Hesthavenによる写真

顧客の解約は、顧客の消耗とも呼ばれ、顧客が会社とのビジネスを停止したときに発生します。 新しい顧客を獲得するための価格は、通常、古い顧客を保持するよりも高いため、企業はこれらの顧客のセグメントを識別することに興味がありま たとえば、Netflixが混乱の危険にさらされている顧客のセグメントを知っていれば、単にそれらを失うのではなく、積極的に特別オファーに従事することが

この記事では、Telco Customer Churn datasetを使用して、簡単な顧客解約予測モデルを作成します。 私たちは、かき回された顧客をモデル化するための意思決定ツリー、データ処理のためのpandas、視覚化のためのmatplotlibを選びました。 上記のすべてをPythonで行います。
このコードは、ベースラインモデルを訓練するためにいくつかのマイナーな調整を持つ別のデータセットで使用できます。 我々はまた、いくつかの参照を提供し、新機能や改善のためのアイデアを与えます。このコードを実行するには、このjupyter notebookをダウンロードします。ここに興味を起こさせるかもしれない少数のリンクはある:

- Labeling and Data Engineering for Conversational AI and Analytics- Data Science for Business Leaders - Intro to Machine Learning with PyTorch - Become a Growth Product Manager - Deep Learning (Adaptive Computation and ML series) - Free skill tests for Data Scientists & Machine Learning Engineers

上記のリンクのいくつかは関係団体リンクであり、購入をする 私はあなたの購入から受け取る手数料のためではなく、その品質のためにコースをリンクすることに注意してください。

データセットを読み込んで前処理するためにpandasを使用します。 Telcoデータセットには、多くの列(機能)を持つ行ごとに一つの顧客があります。 すべての欠損値または重複を持つ行はありません(これは実際のデータセットではほとんど発生しません)。 TotalChargesが””に設定されている11個のサンプルがありますが、これはデータの間違いのようです。 これらのサンプルを削除し、型をnumeric(float)に設定します。div>

telco customer churn datasetの最初のいくつかのサンプル

探索的データ分析

データセットには、カテゴリ(複数の値と順序なし)と数値の2種類の機能があります。 機能名のほとんどは、

  • Partner:顧客にパートナーがいるかどうか(はい、いいえ)、
  • 扶養家族を除いて、自明です: 顧客が扶養家族を持っているかどうか(はい、いいえ)、
  • OnlineBackup:顧客がオンラインバックアップを持っているかどうか(はい、いいえ、インターネットサービスなし)、
  • テニュア:顧客が会社に滞在した月数、
  • MonthlyCharges:顧客に毎月請求される金額、
  • TotalCharges:顧客に請求される合計金額。

データセットには7032人の顧客があり、customerID(非情報)とChurn列(ターゲット変数)のない19個のフィーチャがあります。 カテゴリフィーチャのほとんどは、4つ以下の一意の値を持っています。Div>

フィーチャを二つのリストに結合して、それらを共同で分析できるようにします。

categorical_features = 
numerical_features =
target = "Churn”

数値特徴分布

数値要約技術(平均、標準偏差など。)私たちにスパイク、分布の形を示さず、それを使って外れ値を観察するのは難しいです。 それがヒストグラムを使用する理由です。div>

df.describe()

数値機能の概要
数値機能の概要
数値機能の概要
figcaption>

一見すると、データに外れ値はありません。 データポイントが分布から切断されたり、平均値から遠すぎたりすることはありません。 四分位間範囲(IQR)を計算し、各数値特徴の値が第1および第3四分位から1.5IQR以内であることを示す必要があることを確認する。

数値特徴量を順序間隔に変換することができます。 たとえば、テニュアは数値ですが、多くの場合、小さな数値の違いを気にせず、代わりに短期、中期、長期のテニュアを持つ顧客にテニュアをグループ化します。 それを変換する一つの理由は、ノイズを低減することであろう、多くの場合、小さな変動は単なるノイズです。div>

figcaption>数値特徴のヒストグラム

ターゲット変数との関係で数値特徴の分布を見てください。 私たちは、TotalChargesとテニュアが大きいほど、解約の確率は低いことを観察することができます。div>

ターゲット変数に関連する数値フィーチャ

カテゴリフィーチャ分布

カテゴリフィーチャを分析するには、棒グラフを使用します。 私たちは、電話サービスのない高齢者や顧客がデータにあまり表現されていないことを観察します。div>

カテゴリ機能の分布

次のステップは、ターゲット変数に関連してカテゴリ機能を見ることです。 私たちは、契約の機能のためにこれを行います。 月ごとの契約を持っているユーザーは、長期契約を持つユーザーよりも解約する可能性が高くなります。/div>

ターゲット変数に関連したコントラクト機能

ターゲット変数分布

ターゲット変数分布は、解約されていないユーザーが多くいるため、不均衡な問題に対処していることを示しています。 このモデルは、この例では解約しなかった大多数のクラスユーザーを主に予測するため、高い精度を達成します。

不均衡データセットの影響を最小限に抑えるためにできることはいくつかあります。
-データの再サンプリング(不均衡-学習)、
-より多くのサンプルを収集、
-精度とリコールを精度メトリクスとして使用します。Div>

ターゲット変数分布
df.value_counts().plot('bar').set_title('churned')
/figcaption>

機能

telcoデータセットはすでにcustomeridによってグループ化されているため、新しい機能を追加することは困難です。 解約予測に取り組んでいるとき、私たちは通常、顧客セッションごとに一つのエントリ(特定の時間の顧客活動)を持つデータセットを取得します。 次に、次のような機能を追加することができます:

  • 何かを購入する前のセッション数、
  • セッションあたりの平均時間、
  • セッション間の時間差(頻繁

顧客イベントデータがあることもあり、結果(チャーン)に関連して顧客の行動のパターンを見つけることができます。

エンコード機能

チャーンをモデリングするためのデータセットを準備するには、カテゴリ機能を数値にエンコードする必要があります。 これは、アルゴリズムがデータを処理できるように、”Yes”、”No”を0と1にエンコードすることを意味します。 このプロセスはonehotエンコーディングと呼ばれます。div>

分類子

分類子を作成するには、pythonの機械学習ライブラリであるsklearnを使用します。
sklearnの方法は、特徴処理と分類子を定義するパイプラインを使用することです。 この例では、パイプラインは入力内のデータセットを取得し、フィーチャを前処理して分類子をトレーニングします。
訓練されると、同じ入力を受け取り、出力に予測を返します。

パイプラインでは、カテゴリ機能と数値機能を別々に処理します。 私たちは、カテゴリ特徴を符号化し、平均を除去し、それらを単位分散にスケーリングすることによって数値特徴をスケーリングします。
私たちは、その解釈可能性のために決定木モデルを選択し、最大深度を3(任意)に設定しました。

パイプラインは入力にデータセットを取り、特徴を前処理し、分類子を訓練します

モデルのトレーニング

データセットをトレーニング(75%のサンプル)とテスト(25%のサンプル)に分割します。
私たちはパイプラインを訓練(フィット)し、予測を行います。 Classification_reportを使用すると、精度を計算し、実際の値と予測値を使用してリコールします。

from sklearn.model_selection import train_test_splitdf_train, df_test = train_test_split(df, test_size=0.25, random_state=42)pipeline.fit(df_train, df_train)
pred = pipeline.predict(df_test)

モデルをテスト

classification_reportで精度を計算し、実際の値と予測値でリコールします。クラス1(解約ユーザー)モデルでは、精度0.67、リコール0.37を実現しています。 精度は、私たちの分類器が正しく予測したユーザーの数を教えてくれます。 反対側では、リコールは、それが逃したどのように多くの解約ユーザーを教えてくださ

素人の言葉では、分類器は、かき回されたユーザーのために非常に正確ではありません。Div>

from sklearn.metrics import classification_reportprint(classification_report(df_test, pred))

意思決定ツリーモデルの分類レポート

モデル解釈可能性

意思決定ツリーモデルは、顧客が解約するかどうかを決定するために、契約、monthlycharges、internetservice、totalcharges、およびテニュア機能を使用します。 これらの機能は、意思決定ツリーの分割基準に基づいて、解約された顧客を他の顧客から分離します。

各顧客サンプルはツリーを走査し、最終ノードは予測を与えます。
例えば、Contract_Month-to-monthがある場合:

  • 0に等しい、真の分岐でツリーを横断し続け、
  • 1に等しい、偽の分岐でツリーを横断し続け、
  • 定義されていない、それはクラこれは、モデルがどのように決定を下しているか、またはそこにあるべきではない機能がモデルに潜入しているかどうかを確認するための優れたアDiv>

    意思決定ツリーモデルの解釈

意思決定ツリーモデルの解釈

さらに読む

  1. 顧客解約予測におけるクラスの不均衡の処理—どのように我々はより良い解約予測におけるクラスの不均衡を処理
  2. 機械学習技術を用いた顧客解約予測に関する調査]—この論文では、解約予測のために研究者が使用する最も一般的な機械学習アルゴリズムをレビュー
  3. Kaggleの電話会社の顧客解約—Kaggleの解約分析。
  4. WTTE-RNN-Hackless-churn-modeling—イベントベースのchurn予測。

あなたが行く前に

私は定期的にデータサイエンスと機械学習についてつぶやくTwitterで私に従ってください。div>

コートニー-ヘッジによる写真Unsplash

コメントを残す

メールアドレスが公開されることはありません。