Python

チャーン分析とは?実際に用いられる手法とPythonでの実装方法

メモ
ウマたん
ウマたん
この記事では、顧客の離反を防ぐための施策チャーン分析についてまとめていきます。チャーン分析に使える手法をいくつか紹介した後、その中で定番のロジスティック回帰分析をPythonで実装していきます!

こんにちは!

都内の消費財メーカーでデジタルマーケターとして働くウマたん(@statistics1012)です!

サービスをグロースさせるためには当たり前ですがそのサービスが保有する会員数・契約者数を増やすことが大事。

そして、契約増加数は(新規契約数ー解約数)で表現することができます。

サービスローンチ直後は新規契約数をとにかく増やすことに注力するべきですが、ある程度安定した市場になってくると解約数をいかに減らすかが喫緊の問題になってきます。

例えば、日本の3大キャリアは新規契約数を取ることに躍起になり解約数を減らす手段がなかなかワークしていないのが現状です。

既存の顧客のロイヤリティを高めいかに解約数を減らすかが非常に重要になってきているのです。

そんな解約数を減らすために有用なのが「チャーン分析」と呼ばれる手法。

ウマたん
ウマたん
チャーン分析はもし上手くいけば大きなビジネスインパクトを与えることができるんだ!

この記事ではそんなチャーン分析の特徴とPythonでの実装を見ていきたいと思います。

ウマたん
ウマたん
Pythonの勉強は以下の記事をチェック!
【独学入門】初心者が3か月でPythonを習得できるようになる勉強法!当ブログ【統計ラボ】の本記事では、Pythonを効率よく独学で習得する勉強法を具体的なコード付き実装例と合わせてまとめていきます。Pythonはできることが幅広いので自分のやりたいことを明確にして勉強法を選ぶことが大事です。...

チャーン分析とは

チャーン分析のチャーンとは、英語で「かき混ぜる・激しく動く」などの意味。そこからビジネスの世界でチャーンと言うと解約という意味を表します。

すなわちチャーン分析とは解約する顧客を予測するという分析手法。

チャーン分析により正確に解約顧客を予測することが出来れば、効率よく解約顧客を減らすことができる可能性が高くなります。

やみくもに解約数を減らそうとするのではなく、このままだと解約してしまいそうな人に対して適切な施策を打つことが可能になるのです。

チャーン分析に用いられる手法

チャーン分析においては予測するだけではなく、どの変数が解約に影響しているかを解釈する必要も出てきます。

分析手法には、精度に重きを置く手法結果の解釈に重きを置く手法がありますのでそれぞれについて見ていきたいと思います。

ロジスティック回帰分析

ロジスティック回帰分析は、線形重回帰分析の応用であり目的変数に2項分布を想定した分析手法です。

重回帰分析の仲間なので説明変数がどのくらい目的変数に寄与しているかも理解しやすく、今後の施策に活かしやすくなっています。

また、結果は0,1で表現されるのではなく%で表現されるため解約する確率が80%以上と予測された人に施策を打つなどと閾値を決めてアクションを取ることができるのが特徴です。

こちらは、結果の解釈に重きを置く手法。

予測精度だけ見ると、これから紹介する機械学習手法の方が高いことが多いです。

ロジスティック回帰分析に関してもっと詳しく知りたい方はこちらをご覧ください!

ロジスティック回帰とは?理論からRでの実装!当サイト【統計ラボ】の本記事では、ロジスティック回帰についてRでの実装と共に見ていきます。ロジスティック回帰は2値分類問題において解釈がしやすく実務の場でもよく用いられている手法です。最後に理論と実装をより深く学ぶ勉強法も紹介していきますよー!...

ランダムフォレスト

ランダムフォレストは、簡単な実装でかつ高速でそこそこ高い精度をたたき出せる便利な手法。

ざっくり言うと、

決定木をたくさん集めて合体させた手法

です。

決定木に関してはこちらをご覧ください。詳しくまとめています。

決定木とは?PythonとRで実装してみよう!当サイト【統計ラボ】の本記事では、機械学習手法の基本である決定木について見ていきたいと思います。アルゴリズムが分かりやすく実務でもよく使われる手法です。RとPythonでの簡単な実装も合わせておこなっていくので是非チェックしてくださいね!...

決定木は単体だとそれほど強い手法ではありません。

しかし、その決定木をバギングと呼ばれる集団学習法を用いてたくさん集めてくると最強のランダムフォレストが出来上がるんです。

集団学習法は,決して精度が高いとはいえない弱いモデルをたくさん構築し,これらの予測結果を統合することで高い精度を出す方法論です。

ランダムフォレストでは変数重要度を算出することが可能でどの変数が寄与しているかは把握することが可能です。

ランダムフォレストに関してもっと詳しく知りたい方はこちらをご覧ください!

ランダムフォレストとは?PythonとRで実装してみよう!当サイト【統計ラボ】の本記事では、決定木をアンサンブル学習することにより汎化能力を高めた強力な機械学習手法「ランダムフォレスト」について見ていきましょう!アルゴリズムを確認した後にRでもPythonでも実装をおこなっていきますよー!...

XGBoost

XGBoostもランダムフォレストと同じく決定木を基にした手法です。

ランダムフォレストはアンサンブル学習であるバギングを決定木と組み合わせていますが、XGBoostではアンサンブル学習であるブースティングを決定木と組み合わせています。

バギングは弱い学習器(決定木)が並列で多数決を行うことで効果を発揮するイメージですが、ブースティングは直列でチューニングを行い徐々に改善していくイメージです。

データセットやパラメータにもよりますが、ランダムフォレストよりもXGBoostの方が時間がかかる分精度が高い場合が多いです。

XGBoostでも変数重要度を算出することが可能です。

ただ、どの説明変数がどのくらい変化したら目的変数もどのくらい変化するかを算出するのはロジスティック回帰分析に得意とするところでXGBoostやランダムフォレストでは難しいです。

XGBoostに関して詳しくは以下の記事をご覧ください!

XGboostとは?理論とPythonとRでの実践方法!当ブログ【統計ラボ】の本記事では、機械学習手法の中でも非常に有用で様々なコンペで良く用いられるXgboostについてまとめていきたいと思います。最後にはRで他の機械学習手法と精度比較を行っているのでぜひ参考にしてみてください。...

ちなみにXgboostを改良したLightGBMとCatboostもいかにまとめています!

Light GBM
Light GBMの仕組みとPythonでの実装を見ていこう!当ブログ【統計ラボ】の本記事では、最強の機械学習手法「Light GBM」についてまとめていきます。Light GBMは決定木と勾配ブースティングを組み合わせた手法で、Xgboostよりも計算負荷が軽い手法として注目を集めています。...
Catboost
Catboostとは?XgboostやLightGBMとの違いとPythonでの実装方法を見ていこうー!!当ブログ【統計ラボ】の本記事では、XgboostやLightGBMに代わる新たな勾配ブースティング手法「Catboost」について徹底的に解説していき最終的にPythonにてMnistの分類モデルを構築していきます。LightGBMやディープラーニングとの精度差はいかに!?...
ウマたん
ウマたん
XGboostやランダムフォレストも使われることはあるけど、まだまだロジスティック回帰分析はビジネス最前線でよく使われるメジャーな手法なんだ!

チャーン分析で気を付けなければいけないこと

チャーン分析で高い精度を算出するのは適切な変数さえ選べばそれほど難しくはありません。

ただ大事なのは、その結果をどのようにビジネスに落とし込むか。

例えばある変数が解約率にものすごく影響していることが分かったとしても、そのような変数は往々にして「これまでの継続月数」などアンコントローラブルであり解約に影響しているのは当たり前である変数なことが多いです。

そこでよく行われるのは、解約率によってユーザーをセグメント分けしそれぞれのセグメントに対してABテスト的にある施策を打ってみてその結果を受け今後の施策を使い分けるというモノ。

例えば、解約率20%以下ユーザーに過剰なクーポン施策を行うとチャーンレートが上がってしまうかもしれませんが、80%以上のユーザーに対しては過剰なクーポン施策が有効かもしれません。

ユーザーをセグメントに分けて効果検証を行うことで、ただの予測がアクションに結び付く結果になるのです。

実際にロジスティック回帰分析でチャーン分析をやってみよう!

ここでは簡易的にロジスティック回帰分析を使ってチャーン分析を行ってみます。

PythonでもRでも簡単に実装できますが、今回はPythonを使って実装してみます。

用いるのは、ライブラリsklearnに入っているdiabetesというデータセット。

患者の状況と1年後の症状がデータとして入っています。

それぞれの変数については見ていかず予測精度だけ見ていきます。

チャーン分析にふさわしいデータセットが見つからなかったので、今回は疑似的にチャーン変数を作っていきます。

1年後の症状は量的変数で入っているので、ここでは平均より高い場合は1、低い場合は0として、ある患者の現在の症状から1年後の0・1症状を予測します。

コードは以下。


アウトプットとしては、テストデータの0/1を予測したリストと、予測精度が算出されます。

array([0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 1, 1, 1, 0, 1, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 1, 0, 0, 1, 1, 0, 0, 1, 1, 1, 0, 1, 0, 0, 1, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 1, 0, 1, 0, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 1, 0, 1, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 1, 0, 1, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 1, 1, 0, 0, 1, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0])

予測精度=0.7647058823529411

疑似的にチャーン分析を行うことができました。

無理やり0/1変数を作り出したのでそれほど高い予測精度は出ておりません。

ここでは行いませんが、XGBoostやランダムフォレストで実装するともっと良い精度が出るでしょう。

また、回帰モデルの回帰係数を用いれば、それぞれのサンプルのチャーン確率を算出することができます。

チャーン確率によってユーザーをセグメント分けすることでビジネスチャンスが見出されるかもしれません。

チャーン分析 まとめ

チャーン分析を身に付ければビジネスに大きなインパクトを与えられること間違いなし!

チャーン分析の考え方自体は簡単ですが、

・どんな変数を持ってくるか
・どんな手法を使うか
・結果をどうビジネスに落とし込むか

はなかなか難しい。

もしさらに様々なデータ解析手法やプログラミングを勉強したい方はこちらの統計とPython・Rの勉強方法をご覧ください!

メモ
統計学入門に必要な知識と独学勉強方法を簡単に学ぼう!当ブログ【統計ラボ】の本記事では、統計学入門に必要な知識をカンタンにまとめ、それらをどのように効率的に独学で勉強していけばよいかをお話ししていきます。統計学は難しいイメージが少しありますが、学び方をしっかり考えれば大丈夫!...
機械学習入門に必要な知識と独学勉強方法をPythonとRの実装と一緒に見ていこう!当サイト【統計ラボ】の本記事では、入門者向けに機械学習についてカンタンにまとめていきます。最終的にはどのように機械学習を学んでいけばよいかも見ていきます。細かい手法の実装もPython/Rを用いておこなっていくので適宜参考にしてみてください。...
【独学入門】初心者が3か月でPythonを習得できるようになる勉強法!当ブログ【統計ラボ】の本記事では、Pythonを効率よく独学で習得する勉強法を具体的なコード付き実装例と合わせてまとめていきます。Pythonはできることが幅広いので自分のやりたいことを明確にして勉強法を選ぶことが大事です。...
Pythonを初学者が最短で習得する勉強法

Pythonを使うと様々なことができます。しかしどんなことをやりたいかという明確な目的がないと勉強は捗りません。

Pythonを習得するためのロードマップをまとめましたのでぜひチェックしてみてくださいね!