๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
Machine Learning/Case Study ๐Ÿ‘ฉ๐Ÿป‍๐Ÿ’ป

[BG/NBD] ๊ณ ๊ฐ ๊ฑฐ๋ž˜ ํ–‰๋™ ์˜ˆ์ธก ๋ชจ๋ธ

by ISLA! 2023. 10. 10.

 

BetaGeoFitter๋ž€?

๊ณ ๊ฐ ์ดํƒˆ ์˜ˆ์ธก ๋ฐ ๊ตฌ๋งค ํ™•๋ฅ  ๋ชจ๋ธ๋ง์— ์‚ฌ์šฉ๋˜๋Š” ํ†ต๊ณ„ ๋ชจ๋ธ ์ค‘ ํ•˜๋‚˜๋กœ, ๊ณ ๊ฐ ์ดํƒˆ ๋ฐ ๊ตฌ๋งค ํ™•๋ฅ ์„ ์˜ˆ์ธกํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉ๋œ๋‹ค.

์ด ๋ชจ๋ธ์€ ๊ธฐ์กด ๊ณ ๊ฐ ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์ž‘๋™ํ•˜๋ฉฐ, ํŠนํžˆ ๊ตฌ๋งค ํšŸ์ˆ˜์™€ ์žฌ๊ตฌ๋งค ๊ฐ„๊ฒฉ์„ ๊ณ ๋ คํ•œ๋‹ค.

BetaGeoFitter ๋ชจ๋ธ์„ ๊ตฌํ˜„ํ•˜๋ ค๋ฉด Python์˜ lifetimes ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋‹ค.

์•„๋ž˜๋Š” BetaGeoFitter ๋ชจ๋ธ์˜ ์‚ฌ์šฉ ์˜ˆ์‹œ์ด๋‹ค.


๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ import 

lifetimes ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผ ์„ค์น˜ํ•˜๊ณ  ๊ฐ€์ ธ์˜จ๋‹ค.

!pip install lifetimes
import pandas as pd
from lifetimes import BetaGeoFitter
from lifetimes.datasets import load_cdnow_summary


์˜ˆ์ œ ๋ฐ์ดํ„ฐ๋ฅผ ๋ถˆ๋Ÿฌ์˜ค๊ธฐ

lifetimes ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—๋Š” ์˜ˆ์ œ ๋ฐ์ดํ„ฐ์…‹์ด ํฌํ•จ๋˜์–ด ์žˆ๋‹ค.

์ด ๋ฐ์ดํ„ฐ๋Š” ๊ณ ๊ฐ ID, ๊ตฌ๋งค ๋‚ ์งœ, ๊ตฌ๋งค ๊ธˆ์•ก ๋“ฑ์„ ํฌํ•จํ•˜๊ณ  ์žˆ๋‹ค.

data = load_cdnow_summary(index_col=[0])
print(data.head())



BetaGeoFitter ๋ชจ๋ธ์„ ์ดˆ๊ธฐํ™”ํ•˜๊ณ  ํ•™์Šต

  • ๋ชจ๋ธ์„ ํ•™์Šตํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” 3๊ฐ€์ง€ ์ง€ํ‘œ๊ฐ€ ํ•„์š”ํ•˜๋‹ค. ๋ชจ๋ธ์„ ํ•™์Šตํ•˜๋ฉด ๊ณ ๊ฐ ์ดํƒˆ ๋ฐ ์žฌ๊ตฌ๋งค ํ™•๋ฅ ์„ ์˜ˆ์ธกํ•  ์ˆ˜ ์žˆ๋‹ค.
  • `frequency`: ๊ณ ๊ฐ์˜ ๊ตฌ๋งค ๋นˆ๋„ (์ด ๊ตฌ๋งค ํšŸ์ˆ˜)
  • `recency`: ๊ณ ๊ฐ์˜ ์ตœ๊ทผ ๊ตฌ๋งค๊นŒ์ง€ ๊ฒฝ๊ณผํ•œ ์‹œ๊ฐ„
  • `T`: ๋ฐ์ดํ„ฐ ํฌ์ธํŠธ์˜ ์ˆ˜๋ช… (๊ณ ๊ฐ์˜ ์ฒ˜์Œ ๊ตฌ๋งค๋ถ€ํ„ฐ ๊ฐ€์žฅ ์ตœ๊ทผ ๊ตฌ๋งค๊นŒ์ง€์˜ ์‹œ๊ฐ„)
bgf = BetaGeoFitter(penalizer_coef=0.0)
bgf.fit(data['frequency'], data['recency'], data['T'])

 

 ๊ณ ๊ฐ ๊ตฌ๋งค ํšŸ์ˆ˜ ์˜ˆ์ธก(1๋‹จ์œ„ ์‹œ๊ฐ„ ๊ธฐ์ค€)

  • ๊ฐ ๊ณ ๊ฐ์— ๋Œ€ํ•ด ๋ฏธ๋ž˜ 1 ๋‹จ์œ„์˜ ์‹œ๊ฐ„ ๋™์•ˆ ์กฐ๊ฑด๋ถ€ ์˜ˆ์ƒ ๊ตฌ๋งค ํšŸ์ˆ˜๋ฅผ ๊ณ„์‚ฐ =>> ์ฃผ์–ด์ง„ ์‹œ๊ฐ„๋™์•ˆ ์–ผ๋งˆ๋‚˜ ์ž์ฃผ ๊ตฌ๋งคํ• ๊นŒ?
  • ์ด๋ฅผ ํ†ตํ•ด ์˜ˆ์ƒ ์ดํƒˆ๋ฅ ๋„ ํ™•์ธํ•  ์ˆ˜ ์žˆ๋‹ค.
predicted_churn = bgf.conditional_expected_number_of_purchases_up_to_time(1, data['frequency'], data['recency'], data['T'])
print(predicted_churn.head())



 ๊ณ ๊ฐ ์žฌ๊ตฌ๋งค ํ™•๋ฅ  ์˜ˆ์ธก(1๋‹จ์œ„ ์‹œ๊ฐ„ ๊ธฐ์ค€)

  • ์ฃผ์–ด์ง„ ์‹œ๊ฐ„ ๋™์•ˆ ์žฌ๊ตฌ๋งค๋ฅผ ํ•  ํ™•๋ฅ ์ด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ?
  • ์—ญ์‹œ, ๊ณ ๊ฐ์ดํƒˆ๋ฅ ์„ ์˜ˆ์ธกํ•  ์ˆ˜ ์žˆ๋‹ค. 
# ์˜ˆ์ธก ์žฌ๊ตฌ๋งค ํ™•๋ฅ 
t = 1 # ์˜ˆ์ธก์„ ํ•˜๊ณ ์ž ํ•˜๋Š” ์‹œ๊ฐ„ ๋‹จ์œ„
predicted_repurchase = bgf.predict(t, data['frequency'], data['recency'], data['T'])

 

์‹œ๊ฐํ™”

  • `plot_period_transactions` ํ•จ์ˆ˜๋Š” Lifetimes ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์˜ ์ผ๋ถ€์ธ ํ•จ์ˆ˜๋กœ์„œ, 
  •  ์ฃผ์–ด์ง„ ๋ชจ๋ธ์˜ ๊ตฌ๋งค ๋ฐ ์ดํƒˆ ํŒจํ„ด์„ ํ‘œ์‹œํ•˜๊ธฐ ์œ„ํ•ด ์‹œ๊ฐํ™”๋ฅผ ์ƒ์„ฑํ•œ๋‹ค.
  • ์ด๋ฅผ ํ†ตํ•ด ๊ณ ๊ฐ์˜ ๊ตฌ๋งค ์ฃผ๊ธฐ, ์žฌ๊ตฌ๋งค ํ™•๋ฅ  ๋ฐ ์ดํƒˆ ํ™•๋ฅ ๊ณผ ๊ฐ™์€ ์ •๋ณด๋ฅผ ์‹œ๊ฐ์ ์œผ๋กœ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค.
  • ๊ณ ๊ฐ ์ดํƒˆ ๋ฐ ์žฌ๊ตฌ๋งค ์˜ˆ์ธก ๋ชจ๋ธ์„ ์‹œ๊ฐํ™”ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋œ๋‹ค. ์ฃผ์š” ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค.
๋”๋ณด๊ธฐ

1. `model`: Lifetimes ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ ์‚ฌ์šฉ๋œ ๋ชจ๋ธ ๊ฐ์ฒด๋ฅผ ์ „๋‹ฌํ•œ๋‹ค. ์ฃผ๋กœ BGF (Beta-Geometric/Beta-Negative Binomial) ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ๊ฐ€ ๋งŽ๋‹ค.

2. `max_frequency`: ์ด ๋งค๊ฐœ๋ณ€์ˆ˜๋Š” ๊ณ ๊ฐ ๊ตฌ๋งค ๋นˆ๋„์˜ ์ตœ๋Œ€ ๊ฐ’์œผ๋กœ ์„ค์ •๋œ๋‹ค.
- ์˜ˆ๋ฅผ ๋“ค์–ด, `max_frequency=7`๋กœ ์„ค์ •ํ•˜๋ฉด 7๋ฒˆ ์ดํ•˜์˜ ๊ตฌ๋งค ๋นˆ๋„๋ฅผ ๊ฐ€์ง„ ๊ณ ๊ฐ๋งŒ์„ ๋Œ€์ƒ์œผ๋กœ ์‹œ๊ฐํ™”๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค.
- ์ด๋ ‡๊ฒŒ ํ•จ์œผ๋กœ์จ ๊ณ ๊ฐ ์ค‘์‹ฌ์˜ ๋ถ„์„์„ ํŠน์ • ๋นˆ๋„ ๋ฒ”์œ„๋กœ ์ œํ•œํ•  ์ˆ˜ ์žˆ๋‹ค.

3. `title`: ๊ทธ๋ž˜ํ”„์˜ ์ œ๋ชฉ์„ ์„ค์ •

4. `xlabel`: x ์ถ• ๋ ˆ์ด๋ธ”์„ ์„ค์ •

5. `ylabel`: y ์ถ• ๋ ˆ์ด๋ธ”์„ ์„ค์ •

plot_period_transactions(BGF, max_frequency=7)
plt.show()

 

 

โ–ถ๏ธŽ x์ถ•

- ๊ตฌ๋งค ์ฃผ๊ธฐ(๊ณ ๊ฐ์ด ๋‘๋ฒˆ์งธ ๊ตฌ๋งค๋ฅผ ํ•  ๋•Œ๊นŒ์ง€ ๊ฑธ๋ฆฌ๋Š” ํ‰๊ท  ์‹œ๊ฐ„) ๋˜๋Š” ๊ตฌ๋งค ๋นˆ๋„(ํŠน์ • ๋นˆ๋„ ๋ฒ”์œ„ ๋‚ด์—์„œ์˜ ๊ณ ๊ฐ ์ˆ˜)๋กœ, ๊ณ ๊ฐ๋“ค์ด ์–ผ๋งˆ๋‚˜ ์ž์ฃผ ๊ตฌ๋งคํ•˜๋Š”์ง€ ๋ณด์—ฌ์ค€๋‹ค.

- x ์ถ•์€ max_frequenct ์ดํ•˜์˜ ์ •์ˆ˜๊ฐ’์„ ๊ฐ€์ง„๋‹ค

- ์˜ˆ๋ฅผ ๋“ค์–ด, x์ถ•์ด 1์ด๋ฉด ๊ณ ๊ฐ์ด ํ‰๊ท  1๋ฒˆ์˜ ๊ตฌ๋งค ์ฃผ๊ธฐ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๊ฒƒ์ด๋‹ค. 

 

 

โ–ถ๏ธŽ y์ถ•

- ์žฌ๊ตฌ๋งค ํ™•๋ฅ  ๋˜๋Š” ์ดํƒˆ ํ™•๋ฅ 

- ์žฌ๊ตฌ๋งค ํ™•๋ฅ  : ์ฃผ์–ด์ง„ ๊ตฌ๋งค ์ฃผ๊ธฐ ๋˜๋Š” ๋นˆ๋„ ๋ฒ”์œ„์— ํ•ด๋‹นํ•˜๋Š” ๊ณ ๊ฐ์ด ๋‹ค์‹œ ๊ตฌ๋งค๋ฅผ ํ•  ํ™•๋ฅ ๋กœ,  ๋” ๋†’์€ y ๊ฐ’์€ ๋” ๋†’์€ ์žฌ๊ตฌ๋งค ํ™•๋ฅ ์„ ๋‚˜ํƒ€๋‚ธ๋‹ค.


๐Ÿ‘‰ ์ด์ฒ˜๋Ÿผ ํ•ด๋‹น ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜์—ฌ ๊ณ ๊ฐ ์ดํƒˆ ์˜ˆ์ธก ๋ฐ ๋งˆ์ผ€ํŒ… ์ „๋žต์„ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๋‹ค.

     ๋‹น์—ฐํžˆ ํ•„์š”ํ•  ๊ฒฝ์šฐ ์ „์ฒ˜๋ฆฌ ๋“ฑ์„ ์ถ”๊ฐ€๋กœ ์ˆ˜ํ–‰ํ•˜๋ฉด ์ข‹๋‹ค.

728x90