読者です 読者をやめる 読者になる 読者になる

唯物是真 @Scaled_Wurm

プログラミング(主にPython2.7)とか機械学習とか

グループ別の解約率の逆数で計算したユーザーの平均継続期間が全体の解約率で計算した数値と合わない?

解約率が一定であると仮定すると、解約率の逆数でユーザーの平均継続期間を求めることができます
以下の記事がバズっていた後に、解約率からユーザーの平均継続期間を計算するのを試しているのを見かけました
ところが全体の解約率で計算した値と、ユーザーを属性別に分けて出した解約率を元に計算した値に結構差があって不思議そうな様子でした
migi.hatenablog.com

どんな感じになるのか例を出してみます

ユーザーが\(10\)人いて、月間の解約率が\(p=\frac{3}{4}\)であるとします
これらのユーザーの平均継続期間は解約率の逆数でそれぞれ\(E=\frac{1}{p}=\frac{4}{3}\)ヶ月になります。継続期間を人数倍すると\(\frac{40}{3}\)ヶ月です

実はこの\(10\)人のユーザーは解約率が\(p_A=\frac{1}{2}\)のユーザーが\(5\)人(グループA)、解約率が\(p_B=1\)のユーザーが\(5\)人(グループB)だったと考えます。この場合でも全体の平均解約率は元と同じ\(p=\frac{5 \times p_A + 5 \times p_B}{10}=\frac{3}{4}\)です
グループAの平均継続期間は\(E_A=\frac{1}{p_A}=2\)ヶ月になります。継続期間を人数倍すると\(10\)ヶ月です
グループBの平均継続期間は\(1\)ヶ月になります。継続期間を人数倍すると\(5\)ヶ月です

グループAとBの継続期間の人数倍を合計すると\(15\)ヶ月になります
それに対して全体の継続期間の人数倍は\(\frac{40}{3}\)ヶ月になってしまい、グループAとBの合計よりも少なくなってしまいました

合計が合わなくなる理由

平均継続期間の計算では解約率が一定であることを仮定しています
つまり全体で計算するときには全体の解約率が一定として計算しています
ところがグループそれぞれで平均継続期間を計算するときにはそれぞれのグループについて解約率が一定として計算することになります
それぞれのグループの解約率が一定とすると、解約率の高いグループの人数は低いグループに比べて速く減っていくので、複数のグループを混ぜたときには全体の解約率はどんどん下がっていき、全体の解約率が一定という仮定が成り立たなくます
つまり全体の解約率が一定ではなくなるので、全体の解約率の逆数による平均継続期間の計算とは合わなくなります

また数式的にみると、グループA、Bの期待値がそれぞれ\(E_A=\frac{1}{p_A}\)、\(E_B=\frac{1}{p_B}\)なのに対して全体の解約率で出した平均継続期間は以下のようになります
$$E=\frac{1}{p}=\frac{10}{5 \times p_A + 5 \times p_B}=\frac{10}{5 \times \frac{1}{E_A} + 5 \times \frac{1}{E_B}}=\frac{2E_A E_B}{E_A + E_B}$$
\(E\)は\(E_A, E_B\)を定数倍したものを足し合わせても表現できないことは明らかです

ちなみに\(E=\frac{10}{5 \times \frac{1}{E_A} + 5 \times \frac{1}{E_B}}\)の式は調和平均の形$$\frac{n}{\sum^n_i \frac{1}{x_i}}$$になっています

調和平均は、平均されるそれぞれの値が等しくないときには相加平均\(\frac{E_A+E_B}{2}\)より小さな値になることが知られているので、このことからも全体の平均継続期間がそれぞれのグループで計算した値よりも小さくなることが言えます

まとめ

全体で解約率を求めて平均継続期間を求めたものの人数倍と、グループ別に分けて解約率を求めて平均継続期間を求めたものの人数倍の合計は合わない

おまけ

元の記事では解約率が\(p\)のときに平均継続期間(継続期間の期待値)が\(\frac{1}{p}\)になるのを幾何級数を使って証明していましたが、最初の1回目の試行について考えて期待値の方程式を書くと簡単に解けます
期待値は解約しないときすなわち確率が\(1 - p\)のとき\(1\)増えて\(E + 1\)となります
解約するときにはすなわち確率\(p\)でやめたので期待値は\(1\)です
これを式にすると以下のようになります
$$E=(1 - p)(E + 1)+p \times 1$$
方程式を解くと、期待値は解約率の逆数になります
$$E = \frac{1}{p}$$

-->