ํ๋ฅด์๋๋ฅผ ์ํ ๋ฐ์ดํฐ ๋ถ์ ๊ณผ์
new-mid_50k์ ์ฅ๋ฐ๊ตฌ๋
# ์กฐ๊ฑด: 'price_band'๊ฐ 'mid_50k_150k'์ด๊ณ 'user_type'์ด 'new'์ธ ๋ฐ์ดํฐ ํํฐ๋ง
mid_price_new_df = merged_df[
(merged_df['price_band'] == 'mid_50k_150k') &
(merged_df['user_type'] == 'new')
]
# traffic_source๋ณ add_to_cart (Yes/No) ๊ฐ์ ์ง๊ณ
grouped_cart = (
mid_price_new_df
.groupby(['traffic_source', 'add_to_cart'])
.size()
.unstack(fill_value=0)
.reindex(columns=['Yes', 'No']) # ๋์๋ฌธ์ ์ ํํ ๋ง์ถฐ์ผ ํจ!
.reset_index()
)
print(grouped_cart)
add_to_cart traffic_source Yes No
0 ad 12% 87%
1 organic 17% 83%
2 search 23% 77%
Python
๋ณต์ฌ
์ฅ๋ฐ๊ตฌ๋ no ์ธ ์ฌ๋ ์ค ํ ์ธ ๋
ธ์ถ (new)
import pandas as pd
# CSV ํ์ผ ๋ถ๋ฌ์ค๊ธฐ
merged_df = pd.read_csv("merged_version.csv")
# 1. 'mid_50k_150k' + 'new' ์กฐ๊ฑด ํํฐ๋ง
mid_price_new_df = merged_df[
(merged_df['price_band'] == 'mid_50k_150k') &
(merged_df['user_type'] == 'new')
]
# 2. add_to_cart๊ฐ 'No'์ธ ์ฌ๋๋ง
added_to_cart_df = mid_price_new_df[mid_price_new_df['add_to_cart'] == 'No']
# 3. traffic_source๋ณ discount_exposed (True/False/NaN ํฌํจ) ๊ฐ์ ์ง๊ณ
discount_counts = (
added_to_cart_df
.groupby(['traffic_source', 'discount_exposed'])
.size()
.unstack(fill_value=0)
)
# 4. ๋น์จ(%) ๊ณ์ฐ
discount_ratios = (discount_counts.T / discount_counts.sum(axis=1)).T * 100
discount_ratios = discount_ratios.round(2).reset_index()
# ๊ฒฐ๊ณผ ์ถ๋ ฅ
print(discount_ratios)
discount_exposed traffic_source True False
0 ad 55% 44%
1 organic 60% 40%
2 search 42% 57%
Python
๋ณต์ฌ
์ฅ๋ฐ๊ตฌ๋์ ๋ด์ง ์๋ ์ฌ๋์ ํ๊ตฌํด๋ณด์.. ์ ๊ทธ๋ค์ ์ฅ๋ฐ๊ตฌ๋์ ๋ด์ง ์๋ ๊ฑธ๊น?
ad: 87%์ ๋น์จ๋ก ์ฅ๋ฐ๊ตฌ๋์ ๋ด์ง ์์. ๊ทธ ์ฌ๋๋ค์ 55% ์ ๋ ํ ์ธ ์ ๋ณด์ ๋
ธ์ถ ๋จ
organic: 83%์ ๋น์จ๋ก ์ฅ๋ฐ๊ตฌ๋์ ๋ด์ง ์์. ๊ทธ ์ฌ๋๋ค์ 60%์ ๋ ํ ์ธ ์ ๋ณด์ ๋
ธ์ถ ๋จ
search: 77%์ ๋น์จ๋ก ์ฅ๋ฐ๊ตฌ๋์ ๋ด์ง ์์. ๊ทธ ์ฌ๋๋ค์ 42%์ ๋ ํ ์ธ ์ ๋ณด์ ๋
ธ์ถ ๋จ
์ฅ๋ฐ๊ตฌ๋ no ์ธ ์ฌ๋ ์ค ๋ฆฌ๋ทฐ ํด๋ฆญ ์ฌ๋ถ(new)
# 1. 'mid_50k_150k' ๊ฐ๊ฒฉ๋, ์ ๊ท ์ฌ์ฉ์ ํํฐ๋ง (์ด๋ฏธ ์์ผ๋ ์๋ต ๊ฐ๋ฅ)
mid_price_new_df = merged_df[
(merged_df['price_band'] == 'mid_50k_150k') &
(merged_df['user_type'] == 'new')
]
# 2. ์ฅ๋ฐ๊ตฌ๋์ ๋ด์ง ์์ ์ฌ์ฉ์๋ง ํํฐ
no_cart_df = mid_price_new_df[mid_price_new_df['add_to_cart'] == 'No']
# 3. traffic_source๋ณ, review_clicked๋ณ ์ฌ์ฉ์ ์ ์ง๊ณ
review_click_counts = (
no_cart_df
.groupby(['traffic_source', 'review_clicked'])['user_id']
.count()
.unstack(fill_value=0)
.reset_index()
)
print(review_click_counts)
review_clicked traffic_source False True
0 ad 68% 32%
1 organic 80% 20%
2 search 79% 21%
Python
๋ณต์ฌ
์ฅ๋ฐ๊ตฌ๋์ ๋ด์ง ์์ผ๋ฉด์ ๋ฆฌ๋ทฐ ํด๋ฆญ?
ad: 87%์ ๋น์จ๋ก ์ฅ๋ฐ๊ตฌ๋์ ๋ด์ง ์์. ๊ทธ ์ฌ๋๋ค์ 32% ์ ๋ ๋ฆฌ๋ทฐ ํด๋ฆญ
organic: 83%์ ๋น์จ๋ก ์ฅ๋ฐ๊ตฌ๋์ ๋ด์ง ์์. ๊ทธ ์ฌ๋๋ค์ 20% ์ ๋ ๋ฆฌ๋ทฐ ํด๋ฆญ
search: 77%์ ๋น์จ๋ก ์ฅ๋ฐ๊ตฌ๋์ ๋ด์ง ์์. ๊ทธ ์ฌ๋๋ค์ 21% ์ ๋ ๋ฆฌ๋ทฐ ํด๋ฆญ
returning-mid_50k์ ์ฅ๋ฐ๊ตฌ๋
# ์กฐ๊ฑด: 'price_band'๊ฐ 'mid_50k_150k'์ด๊ณ 'user_type'์ด 'returning'์ธ ๋ฐ์ดํฐ ํํฐ๋ง
mid_price_new_df = merged_df[
(merged_df['price_band'] == 'mid_50k_150k') &
(merged_df['user_type'] == 'returning')
]
# traffic_source๋ณ add_to_cart (Yes/No) ๊ฐ์ ์ง๊ณ
grouped_cart = (
mid_price_new_df
.groupby(['traffic_source', 'add_to_cart'])
.size()
.unstack(fill_value=0)
.reindex(columns=['Yes', 'No']) # ๋์๋ฌธ์ ์ ํํ ๋ง์ถฐ์ผ ํจ!
.reset_index()
)
print(grouped_cart)
add_to_cart traffic_source Yes No
0 ad 18% 81%
1 organic 28% 72%
2 search 28% 72%
Python
๋ณต์ฌ
์ฅ๋ฐ๊ตฌ๋ no ์ธ ์ฌ๋ ์ค ํ ์ธ ๋
ธ์ถ(returning)
import pandas as pd
# CSV ํ์ผ ๋ถ๋ฌ์ค๊ธฐ
merged_df = pd.read_csv("merged_version.csv")
# 1. ์กฐ๊ฑด: mid_50k_150k & returning
mid_price_returning_df = merged_df[
(merged_df['price_band'] == 'mid_50k_150k') &
(merged_df['user_type'] == 'returning')
]
# 2. ์ฅ๋ฐ๊ตฌ๋์ ๋ด์ง ์์ ์ฌ๋๋ง
no_cart_df = mid_price_returning_df[mid_price_returning_df['add_to_cart'] == 'No']
# 3. traffic_source๋ณ discount_exposed (True/False/NaN) ๊ฐ์ ์ง๊ณ
discount_counts = (
no_cart_df
.groupby(['traffic_source', 'discount_exposed'])
.size()
.unstack(fill_value=0)
)
# 4. ๋น์จ(%)๋ก ์ ๊ทํ
discount_ratio = (discount_counts.T / discount_counts.sum(axis=1)).T * 100
discount_ratio = discount_ratio.round(2).reset_index()
# ๊ฒฐ๊ณผ ์ถ๋ ฅ
print(discount_ratio)
traffic_source True False
ad 52% 48%
organic 77% 23%
search 48% 52%
Python
๋ณต์ฌ
ad: 81%์ ๋น์จ๋ก ์ฅ๋ฐ๊ตฌ๋์ ๋ด์ง ์์. ๊ทธ ์ฌ๋๋ค์ 52% ์ ๋ ํ ์ธ ์ ๋ณด์ ๋
ธ์ถ ๋จ
organic: 72%์ ๋น์จ๋ก ์ฅ๋ฐ๊ตฌ๋์ ๋ด์ง ์์. ๊ทธ ์ฌ๋๋ค์ 77%์ ๋ ํ ์ธ ์ ๋ณด์ ๋
ธ์ถ ๋จ
search: 72%์ ๋น์จ๋ก ์ฅ๋ฐ๊ตฌ๋์ ๋ด์ง ์์. ๊ทธ ์ฌ๋๋ค์ 48%์ ๋ ํ ์ธ ์ ๋ณด์ ๋
ธ์ถ ๋จ
์ฅ๋ฐ๊ตฌ๋ no ์ธ ์ฌ๋ ์ค ๋ฆฌ๋ทฐ ๋
ธ์ถ(returning)
# 1. 'mid_50k_150k' ๊ฐ๊ฒฉ๋, ์ฌ๋ฐฉ๋ฌธ ์ฌ์ฉ์ ํํฐ๋ง
mid_price_returning_df = merged_df[
(merged_df['price_band'] == 'mid_50k_150k') &
(merged_df['user_type'] == 'returning')
]
# 2. ์ฅ๋ฐ๊ตฌ๋์ ๋ด์ง ์์ ์ฌ์ฉ์๋ง ์ถ์ถ
no_cart_returning = mid_price_returning_df[mid_price_returning_df['add_to_cart'] == 'No']
# 3. traffic_source๋ณ, review_clicked๋ณ ๊ฑด์ ์ง๊ณ
counts = (
no_cart_returning
.groupby(['traffic_source', 'review_clicked'])['user_id']
.count()
.unstack(fill_value=0)
)
# 4. traffic_source๋ณ ํฉ๊ณ๋ก ๋๋ ๋น์จ(%) ๊ณ์ฐ
rates = (
counts
.div(counts.sum(axis=1), axis=0)
.mul(100)
.round(1)
.reset_index()
)
print(rates)
review_clicked traffic_source False True
0 ad 52% 48%
1 organic 84% 15%
2 search 67% 33%
Python
๋ณต์ฌ
์ฅ๋ฐ๊ตฌ๋์ ๋ด์ง ์์ผ๋ฉด์ ๋ฆฌ๋ทฐ ํด๋ฆญ?
ad: 81%์ ๋น์จ๋ก ์ฅ๋ฐ๊ตฌ๋์ ๋ด์ง ์์. ๊ทธ ์ฌ๋๋ค์ 48% ์ ๋ ๋ฆฌ๋ทฐ ํด๋ฆญ
organic: 72%์ ๋น์จ๋ก ์ฅ๋ฐ๊ตฌ๋์ ๋ด์ง ์์. ๊ทธ ์ฌ๋๋ค์ 15%์ ๋ ๋ฆฌ๋ทฐ ํด๋ฆญ
search: 72%์ ๋น์จ๋ก ์ฅ๋ฐ๊ตฌ๋์ ๋ด์ง ์์. ๊ทธ ์ฌ๋๋ค์ 33% ์ ๋ ๋ฆฌ๋ทฐ ํด๋ฆญ
์ฃผ๋ชฉํ ์
๋ฆฌํด ๊ณ ๊ฐ ์ค organic ๋ถ๋ถ์์๋, ํ ์ธ ์ ๋ณด์ ๋
ธ์ถ๋ ๋น์จ์ด ๋ ๋ง์์๋ ๋ถ๊ตฌํ๊ณ , ์ฅ๋ฐ๊ตฌ๋์ ๋ด๋ ๋น์จ์ด ๋ ์ ์
ํด์:
โข
ํ ์ธ์ ์ ๋
ธ์ถ๋๊ณ ์์ง๋ง, organic ์ ์
returning ์ ์ ์๊ฒ๋ ํ ์ธ๋ง์ผ๋ก๋ ์ฅ๋ฐ๊ตฌ๋ ํ๋์ ์ ๋ํ๊ธฐ์ ๋ถ์กฑํจ
โข
organic ์ ์
์ ๋ณดํต ์๋ฐ์ ํ์ or ๋ธ๋๋ ๊ด์ฌ์์ ๊ธฐ์ธํ ๊ฒฝ์ฐ๊ฐ ๋ง์, ๋จ์ ํ ์ธ๋ณด๋ค ๋ค๋ฅธ ๋๊ธฐ ์์ธ์ด ํ์ํจ





