LTV(lifetime value)ã¨ãã顧客(ã¦ã¼ã¶ã¼)ãå°æ¥çã«ä½¿ãéé¡ãäºæ¸¬ãããã¨ãã話ãããã¾ã
åã«ä»¥ä¸ã®è¨äºã§ãæ¸ãã¾ããããæé¡èª²éå¶ã®ãµã¼ãã¹ã ã¨ç²ãæ¨å®ã¨ãã¦è§£ç´çãä¸å®ã¨ã¿ãªãã¦è§£ç´çã®éæ°ãå¹³åç¶ç¶æéã¨ãã¦LTVãè¨ç®ããããã¦ãã¾ã
sucrose.hatenablog.com
LTVããããã°ãä¾ãã°LTVã5000åã®ã¦ã¼ã¶ã¼ãç²å¾ããã®ã«ã³ã¹ãã¨ãã¦3000åããããã¨ã¦ã¼ã¶ã¼ãä¸äººç²å¾ãããã¨ã«2000åãã¤å©çãåºããã¨è¨ã£ãè¨ç®ãã§ãã¾ã
æ°è¦ã¦ã¼ã¶ã¼ã®LTVãæ¢åã¦ã¼ã¶ã¼å ¨ä½ã®è§£ç´çã®éæ°ã§è¨ç®ãã¦ããã®ãè¦ããã¦ãæ°è¦ã¦ã¼ã¶ã¼ã®è§£ç´çã£ã¦æ¢åã¦ã¼ã¶ã¼å ¨ä½ã®è§£ç´çã¨ã¯å ¨ç¶åããªãã®ã§ã¯ï¼ãã¨æã£ãã®ã§ç°¡åã«è¨ç®ãã¦ã¿ã¾ãã(å æ以åã«å¥ç´ãã解ç´çã®ä½ãã¦ã¼ã¶ã¼ãæ®ã£ã¦ããã®ã§æ°è¦ã¦ã¼ã¶ã¼ã®è§£ç´çãããå ¨ä½ã®è§£ç´çã¯ä¸ããã¯ãï¼)
ã·ãã¥ã¬ã¼ã·ã§ã³
è¨å®
極端ãªä¾ã¨ãã¦ãæ¯æ以ä¸ã®200人ã®ã¦ã¼ã¶ã¼ãæ°è¦ã«æé¡1000åã®èª²éå¶ã®ãµã¼ãã¹ã«å¥ç´ããã¨ãã¦ã·ãã¥ã¬ã¼ã·ã§ã³ãã¦ã¿ã¾ã
- æãã¨ã®è§£ç´çã10%ã®ã¦ã¼ã¶ã¼100人
- æãã¨ã®è§£ç´çã50%ã®ã¦ã¼ã¶ã¼100人
解ç´ã¯å¿ ãææ«ã«çºçããããæã«å¥ç´ããã¦ã¼ã¶ã¼ã®è§£ç´ã¯å¥ç´ãããã®æããçºçããã¨ãã¾ã
æãã¨ã®è§£ç´çã10%ã®æ°è¦ã¦ã¼ã¶ã¼ã®è§£ç´çã®éæ°ã§LTVãæ±ããã¨\(1000 \times \frac{1}{0.1} = 10000\)
æãã¨ã®è§£ç´çã50%ã®æ°è¦ã¦ã¼ã¶ã¼ã®è§£ç´çã®éæ°ã§LTVãæ±ããã¨\(1000 \times \frac{1}{0.5} = 2000\)
ä¸è¨ã®2群100人ãã¤ã®å¹³åã®LTVã¯\(\frac{10000 \times 100 + 2000 \times 100}{200} = 6000\)ã¨ãªãã¾ã
ã¡ãªã¿ã«ä¸ã®æ¹ã«ãè²¼ã£ã以ä¸ã®è¨äºã«æ¸ããããã«å ¨ä½ã®è§£ç´çã®éæ°ããLTVãè¨ç®ããã¨åã ã®ã¦ã¼ã¶ã¼ã®è§£ç´çã®éæ°ããè¨ç®ããLTVã®å¹³åã¨ã¯å ¨ç¶éãå¤ã«ãªãã®ã§æ³¨æãå¿ è¦ããããã¾ãã(ï¼)
ä»åã®å ´åã解ç´çã®å¹³åã¯\(\frac{0.1 \times 100 + 0.5 \times 100}{200} = 0.3\)ãªã®ã§ã解ç´çã®éæ°ã§LTVãæ±ããã¨\(1000 \times \frac{1}{0.3} \approx 3333\)
çµæ
ä¸è¨ã®æ¡ä»¶ã§ã·ãã¥ã¬ã¼ã·ã§ã³ãåããã¦ãæãã¨ã®ã¦ã¼ã¶ã¼ã®äººæ°ã解ç´çãLTVã«ã¤ãã¦è¨ç®ãã¦ã°ã©ããæ¸ãã¦ã¿ã¾ãã(60ã¶æã¾ã§10000åã®å¹³å)
解ç´ç(churn rate?)ã®å®ç¾©ã¯è§£ç´ããã¦ã¼ã¶ã¼æ°ãåæ¯ã§å²ãã¨ãããã®ã§ãããåæ¯ã¨ãªãã¦ã¼ã¶ã¼æ°ã¯æã®éä¸ã§å¤ãã£ã¦ãã¾ãã®ã§ãåæ¯ãåç´ã«ææ«ã«ããã¦ã¼ã¶ã¼æ°ã«ããããæåã¨ææ«ã®ã¦ã¼ã¶ã¼æ°ã®å¹³åã«ããããããããªããªã¨ã¼ã·ã§ã³ãããã¾ã
è¨ç®ã楽ãªã®ã§ãä»åã¯ææ«ã«ããã¦ã¼ã¶ã¼æ°(ãã®æã«è§£ç´ããã¦ã¼ã¶ã¼ãå«ã)ãåæ¯ã¨ãã¾ã
ã°ã©ã
ã¦ã¼ã¶ã¼æ°ã¯æãçµéããã¨ã解ç´çãã¨ã«ä¸å®ã®å¤ã«åæãã¦ããã®ãããã(ãã®æã«è§£ç´ãã人æ°ã¯å«ãã§ãã¾ãã)
解ç´çã¯åæã®æ°è¦ã¦ã¼ã¶ã¼ããããªãã¨ãã®å¤ããã©ãã©ãä¸ãã£ã¦ãã£ã¦ããå¤ã«åæãã¦ãã
å
¨ä½ã®è§£ç´çããè¨ç®ããLTVã¨åã¦ã¼ã¶ã¼ã®è§£ç´çããè¨ç®ããLTVã®å¹³åãã°ã©ãã«ãã
ã©ã¡ããåæã®æ°è¦ã¦ã¼ã¶ã¼ããããªãã¨ãã®å¤ãããå¢å ãã¦ãã
以ä¸ã®ããã«æ¯æã®æ°è¦ã¦ã¼ã¶ã¼ã®LTVãåºå®ãã¦ã·ãã¥ã¬ã¼ã·ã§ã³ãã¦ããã¦ã¼ã¶ã¼å
¨ä½ã®LTVã¯ãã®å¤ã¨ã¯éã£ã¦ãã
ããããããã¨ã«ãåæããã¨ãã®å
¨ä½ã®è§£ç´çããè¨ç®ããLTVã¨ãæ°è¦ã¦ã¼ã¶ã¼ã®ããããã®è§£ç´çã®éæ°ã使ã£ã¦è¨ç®ããLTVã®å¹³åã¯ä¸è´ãã¦ããããã«è¦ãã
æ°å¼çãªè©±
ããæã«æ®ã£ã¦ããã¦ã¼ã¶ã¼æ°ã¯ã1ã¶æç®ã®ã¦ã¼ã¶ã¼ã2ã¶æç®ã®ã¦ã¼ã¶ã¼ãâ¦â¦ã¨ãªãã®ã§ã解ç´çã¨æ¯æå¥ç´ãã人æ°ãä¸å®ã¨ããå ´åãå¹¾ä½ç´æ°ã®ç·åã§ã ãããã®å¤ãè¨ç®ã§ãã¾ã
ã¤ã¾ã解ç´ç\(p\)ã®ã¦ã¼ã¶ã¼ã1ã¶æç®ããnã¶æç®ã¾ã§ããã¨ãã®ãããã®ã¦ã¼ã¶ã¼ã®äººæ°ã®ç·åã¯å
ã®äººæ°ã®\((1-p)\frac{1 - (1-p)^n}{1-(1-p)}\)åã¨ãªãã\(n\)ãç¡é大ã«ãªã£ãã¨ãã«åæããã®ã¯\(\frac{1 - p}{p}\)åã¨ãªãã¾ã
試ãã«\(p=\frac{1}{10}\)ãå
¥ããã¨\(\frac{1 - 0.1}{0.1}=9\)åã¨ãªããä¸ã®ã·ãã¥ã¬ã¼ã·ã§ã³ã®çµæã¨ä¸è´ãã¾ã
ãã®çµæã使ãã¨è§£ç´çãLTVã®åæããå¤ãè¨ç®ã§ãã¾ã
åæããã¨ãã®è§£ç´çã¯ä»¥ä¸ã®ããã«ãªã
$$p = \frac{\mathrm{解ç´çã0.1ã®ã¦ã¼ã¶ã¼æ°} \times 0.1 + \mathrm{解ç´çã0.5ã®ã¦ã¼ã¶ã¼æ° \times 0.5}}{\mathrm{解ç´çã0.1ã®ã¦ã¼ã¶ã¼æ°} + \mathrm{解ç´çã0.5ã®ã¦ã¼ã¶ã¼æ°}}$$ ä»å使ã£ã解ç´çã®å®ç¾©ã§ã¯ä¸ã®ã¦ã¼ã¶ã¼æ°ã®å¼ã¨ã¯éã£ã¦ãã®æã«è§£ç´ãã人æ°ãå«ããå¿
è¦ãããã®ã§åé
ã¯æåã®äººæ°ã®\(1-p\)åã§ã¯ãªã\(1\)åã«ãªããããªãã¡\(n\)ã極大ã«ãªã£ãã¨ãã«åæããã¦ã¼ã¶ã¼æ°ã¯å
ã®\(\frac{1}{p}\)åã§ãã
ãã®çµæã使ãã¨ä»¥ä¸ã®ããã«ãªãã·ãã¥ã¬ã¼ã·ã§ã³ã®çµæã¨ã»ã¼ä¸è´ãã
$$\frac{\frac{1}{0.1} \times 100 \times 0.1 + \frac{1}{0.5} \times 100 \times 0.5}{\frac{1}{0.1} \times 100 + \frac{1}{0.5} \times 100} = \frac{100 + 100}{\frac{1}{0.1} \times 100 + \frac{1}{0.5}\times 100} \approx 0.17$$ ã¡ãªã¿ã«ä¸ã®å¼ã¯æ¯æã®æ°è¦ã¦ã¼ã¶ã¼ãã¨ã®è§£ç´çã®èª¿åå¹³åã®å½¢ã«ãªã£ã¦ãã
LTVã¯è§£ç´çã®éæ°ã«æãã¨ã®éé¡ããããã°ããã®ã§åæããã¨ãã®LTVã®è¨ç®ã¯ä¸ã®çµæã使ãã°ããã以ä¸ã®ããã«ãªã
$$1000 \times \frac{\frac{1}{0.1} \times 100 + \frac{1}{0.5}\times 100}{100 + 100} = 6000$$
ãã®æ°å¤ã¯æ°è¦ã¦ã¼ã¶ã¼ã ãè¦ãã¨ãã®ãã¦ã¼ã¶ã¼ãã¨ã®è§£ç´çã®éæ°ã使ã£ã¦è¨ç®ããLTVã®å¹³åã¨ä¸è´ãã¦ãã
$$\frac{1000 \times \frac{1}{0.1} \times 100 + 1000 \times \frac{1}{0.5} \times 100}{100 + 100} = 6000$$
ããä¸åº¦ã°ã©ããã¿ãã¨ãéãç·ã®æåã¨ç·ã®ç·ã®æå¾ãä¸è´ãã¦ããã®ãããã
ãã®æ§è³ªã群ãå¢ãã¦ãåããããªæãã«ãªãã®ã確ãããããã«è§£ç´ç0.1ãã1.0ã¾ã§ã®10åã®ã°ã«ã¼ãã«å¯¾ãã¦ã·ãã¥ã¬ã¼ã·ã§ã³ãè¡ãã¾ãã
(ã°ã«ã¼ãæ°ä»¥å¤ã¯åæ§ã®æ¡ä»¶ã§ãæ¯æ100人ãã¤æ°è¦ã¦ã¼ã¶ã¼ã追å ãã¦ãã¾ã)
ããã¨åæ§ã«åæããå
¨ä½ã®è§£ç´çããè¨ç®ããLTVã¨æ°è¦ã¦ã¼ã¶ã¼ã®åã
ã®LTVã®å¹³åãã»ã¼ä¸è´ããçµæãå¾ããã¾ãã(æ°å¼çã«ãããªã£ã¦ããã®ã§å½ç¶ã®çµæãã)
ã¾ã¨ã
ã¨ããããã§å½ç¶ã¨ããã°å½ç¶ã§ãããã·ãã¥ã¬ã¼ã·ã§ã³ã§æ°è¦ã¦ã¼ã¶ã¼ã®è§£ç´çãä¸å®ã§ãå
¨ä½ã®è§£ç´çã¯æ°è¦ã¦ã¼ã¶ã¼ã®è§£ç´çã¨ã¯å
¨ç¶éãå¤ã«ãªããã¨ããããã¾ãã
ã¤ã¾ãå
¨ä½ã®è§£ç´çããLTVãè¨ç®ãã¦ãæ°è¦ã¦ã¼ã¶ã¼ã®LTVã®æ¨å®ã¨ãã¦ã¯ãã¾ããããªãã®ããã¨æãã®ã§ãããæ¯æå質ã®æ°è¦ã¦ã¼ã¶ã¼ãæ¥ãã¨ããä»®å®ã®ãã¨ã§ã¯åæããã¾ã§æéãçµã¦ã°å
¨ä½ã®è§£ç´çããè¨ç®ããLTVã¨æ°è¦ã¦ã¼ã¶ã¼ã®ããããã®LTVãå¹³åãããã®ãåãçµæã«ãªãã®ã§ãæ¬å½ã«æ±ããããã®ãªã®ãã¯ãããããã¾ãããæ¨å®ã¨ãã¦ã¯ãããªãã«ãããã®ãåºã¦ããã®ããããã¾ãã(ï¼)(ãããã解ç´çãªã©ãä¸å®ã¨ããä»®å®ãã©ããªã®ãã¨ãã話ã¯ãã¦ãã)
LTVã®è¨ç®ãçµ±è¨ã«ã¤ãã¦ããã»ã©è©³ããããã§ã¯ãªãã®ã§ã誤ããç¥ã£ã¦ãããæ¹ãããæ å ±ãªã©ããã°ã³ã¡ã³ããã¦ããã ããã¨å¬ããã§ã
åè
Customer lifetime value - Wikipedia
Wikipediaãè¦ãã¨ããå°ãé ã使ã£ã(ï¼)LTVã®è¨ç®ãããããããã¿ããã§ã
ã½ã¼ã¹ã³ã¼ã
# coding: utf-8 from __future__ import division from __future__ import print_function from __future__ import unicode_literals from future_builtins import * import random import numpy as np import seaborn as sns import matplotlib.font_manager #確çã®ç°ãªãnåã®ç¾¤ã®ã¦ã¼ã¶ã¼ãä»®å® #ããããæ¯æper_month人ãã¨å¢ãã¦ãã prob = [0.1, 0.5] per_month = [100, 100] #prob = [0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0] #per_month = [100] * len(prob) profit = 1000 stats_user = [] stats_ratio = [] stats_ltv = [] for i in xrange(1000): stats_user.append([]) stats_ratio.append([]) stats_ltv.append([]) users = [0] * len(prob) for j in xrange(60): denominator = sum(users) + sum(per_month) for u in xrange(len(users)): users[u] += per_month[u] decrease = [0] * len(users) for u in xrange(len(users)): for v in xrange(users[u]): if random.random() < prob[u]: decrease[u] += 1 for u in xrange(len(users)): users[u] -= decrease[u] stats_user[i].append([sum(users)] + users) ratio = sum(decrease) / denominator stats_ratio[i].append(ratio) ltv = [] for u in xrange(len(users)): ltv.append(profit / prob[u]) average_ltv = 0 for u in xrange(len(users)): average_ltv += ltv[u] * (users[u] + decrease[u]) average_ltv /= (sum(users) + sum(decrease)) stats_ltv[i].append([average_ltv, profit / ratio]) stats_user = np.array(stats_user) print(stats_user.mean(axis=0)) stats_ratio = np.array(stats_ratio) print(stats_ratio.mean(axis=0)) stats_ltv = np.array(stats_ltv) print(stats_ltv.mean(axis=0)) prop = matplotlib.font_manager.FontProperties(fname=r'C:\Windows\Fonts\meiryo.ttc', size=12) sns.plt.title('æãã¨ã®ã¦ã¼ã¶ã¼æ°', fontproperties=prop) sns.plt.xlabel('æ', fontproperties=prop) sns.plt.ylabel('ã¦ã¼ã¶ã¼æ°', fontproperties=prop) sns.plt.plot(stats_user.mean(axis=0)) sns.plt.legend(['åè¨'] + ['解ç´ç$p={}$ã®ã¦ã¼ã¶ã¼'.format(p) for p in prob], prop=prop) sns.plt.show() sns.plt.title('æãã¨ã®å ¨ä½ã®è§£ç´ç', fontproperties=prop) sns.plt.xlabel('æ', fontproperties=prop) sns.plt.ylabel('解ç´ç', fontproperties=prop) sns.plt.plot(stats_ratio.mean(axis=0)) sns.plt.show() sns.plt.title('æãã¨ã®LTV', fontproperties=prop) sns.plt.xlabel('æ', fontproperties=prop) sns.plt.ylabel('LTV', fontproperties=prop) sns.plt.ylim(0, 10000) sns.plt.plot(stats_ltv.mean(axis=0)) sns.plt.legend(['ã¦ã¼ã¶ã¼ããããã®è§£ç´çã®éæ°ã§è¨ç®ããLTVã®å¹³å', 'å ¨ä½ã®è§£ç´çã®éæ°ã使ã£ã¦è¨ç®ããLTV'], prop=prop) sns.plt.show()