๐Ÿ”ฅ[KHUDA_RecSys] ํ”„๋กœ์ ํŠธ ์ค€๋น„(2)๐Ÿ”ฅ

nothingismeยท2022๋…„ 11์›” 13์ผ

[KHUDA_RecSys]

๋ชฉ๋ก ๋ณด๊ธฐ
2/8
post-thumbnail

๐Ÿ—“๏ธ 1113

โ‡๏ธ ์นธ๋‚˜์—์„œ ์“ฐ๋Š” EDA ๊ณผ์ • ๊ธฐ๋ก์ด๋‹ค. ์˜ค๋Š˜์€ ์—ฌ๋Ÿฌ Reference๋ฅผ ์ฐธ๊ณ ํ•˜์—ฌ ํ•ด๋ณด์•˜๋‹ค.

โœ… ์ฐธ๊ณ ์ฝ”๋“œ1: https://www.kaggle.com/code/gunesevitan/otto-multi-objective-recommender-system-eda
โœ… ์ฐธ๊ณ ์ฝ”๋“œ2: https://www.kaggle.com/code/mvvppp/otto-eda-to-getting-started
โœ… ์ฐธ๊ณ ์ฝ”๋“œ3: https://www.kaggle.com/code/edwardcrookenden/otto-getting-started-eda-baseline

โœ… ์ž ์‹œ ๊ธฐ๋กํ•ด๋‘๋Š” EDA Guideline ์ฐธ๊ณ  ์‚ฌ์ดํŠธ๋“ค

โœ… ํšจ์ค€์˜ค๋น ๊ฐ€ UNIX TIMESTAMP ์ „์ฒ˜๋ฆฌ์™€ click, cart, order์— ํ•ด๋‹นํ•˜๋Š” 'TYPE' label์„ 0, 1, 2 numeric ๋ฐ์ดํ„ฐ๋กœ mapping ํ•ด์ฃผ๋Š” ์ž‘์—…์„ ํ•˜๊ณ  3๊ฐœ์˜ ์ƒ˜ํ”Œ๋กœ ๋ถ„ํ• ํ•œ csv ํŒŒ์ผ์„ ๋ณด๋‚ด์ฃผ์—ˆ๋‹ค. EDA ๋งŽ์ด ์•ˆ ํ•ด๋ด์„œ ์ฐธ๊ณ  ์ฝ”๋“œ Review๋ฅผ ์ž์„ธํžˆ ํ•ด๋ณด๋Š” ๊ฒƒ๋ถ€ํ„ฐ ํ•ด๋ด์•ผ๊ฒ ๋‹ค.


โœ… ์ฐธ๊ณ  ์ฝ”๋“œ 1 Review & ๋”ฐ๋ผํ•ด๋ณด๊ธฐ

1. Event, Unique Sessions, Unique Products, Clicks, Carts, Orders์˜ Number์„ ๊ณ„์‚ฐํ•ด๋ณธ๋‹ค.
๐Ÿ“Œ ์ฃผ์˜ํ•  ์  : Unique Sessions๊ณผ Unique Products๋ฅผ ๊ณ„์‚ฐํ•  ๋•Œ ์ค‘๋ณต์„ ์ œ๊ฑฐํ•ด์ค˜์•ผ ํ•œ๋‹ค.

2. Actions - Clicks, Cart, Order์˜ ๊ฐœ์ˆ˜๋ฅผ Countํ•˜์—ฌ ํžˆ์Šคํ† ๊ทธ๋žจ์œผ๋กœ ์‹œ๊ฐํ™”ํ•œ๋‹ค.

3. Training Data์—์„œ ๊ธฐ๋ก๋œ Session์˜ ๊ธฐ๊ฐ„์„ ์‚ดํŽด๋ณธ๋‹ค.

4. ๊ฐ€์žฅ ๋งŽ์ด ๋“ฑ์žฅํ•œ Aid(Product)์˜ ์ข…๋ฅ˜๋ฅผ ์•Œ์•„๋ณด๊ณ , ์–ผ๋งˆ๋‚˜ ๋“ฑ์žฅํ–ˆ๋Š”์ง€๋„ ํฌํ•จํ•˜์—ฌ ์‹œ๊ฐํ™”ํ•œ๋‹ค.

๐Ÿ“Œ ์œ„์˜ ๋ฐฉ์‹์€ Click, Order, Cart ๋ชจ๋‘ ํฌํ•จํ•˜์—ฌ Aid์˜ ๋นˆ๋„๋ฅผ ๊ณ„์‚ฐํ•œ ๊ฒƒ์ด๋‹ค. ์•„๋ž˜์™€ ๊ฐ™์€ ํ˜•ํƒœ๋กœ ํ•ด์„œ ์œ„์™€ ๋น„์Šทํ•œ ๊ณผ์ •์„ ๊ฑฐ์น˜๋ฉด Click event์—์„œ ๊ฐ€์žฅ ๋งŽ์ด ๋“ฑ์žฅํ•œ Aid, Cart event์—์„œ ๊ฐ€์žฅ ๋งŽ์ด ๋“ฑ์žฅํ•œ Aid, Order event์—์„œ ๊ฐ€์žฅ ๋งŽ์ด ๋“ฑ์žฅํ•œ Aid๋ฅผ ๊ณ„์‚ฐํ•˜๊ณ  ์‹œ๊ฐํ™”ํ•  ์ˆ˜ ์žˆ๋‹ค.

df_train_aids_by_types  = df_train.groupby(['type', 'aid'])[['aid']].count()

df_train_click_aid_counts = df_train_aids_by_types.loc[0].rename(columns={'aid': 'count'}).reset_index()
df_train_cart_aid_counts = df_train_aids_by_types.loc[1].rename(columns={'aid': 'count'}).reset_index()
df_train_order_aid_counts = df_train_aids_by_types.loc[2].rename(columns={'aid': 'count'}).reset_index()

5. ์„ธ์…˜์—์„œ Click, Cart, Order์ด ์–ด๋А ์ •๋„ ๋น„์œจ๋กœ ์กด์žฌํ•˜๋Š”์ง€ ๊ณ„์‚ฐํ•ด๋ณธ๋‹ค.
๐Ÿ“Œ ์•„๋ž˜ ์ฝ”๋“œ๋ฅผ ๋Œ๋ฆฌ๋Š” ์ค‘์ธ๋ฐ ์ž๊พธ ์ฝ”๋žฉ์ด ํ„ฐ์ง„๋‹ค. ์Šฌํ”„๋‹ค. ์–ด์ฐŒ ์ €์ฐŒ ์„ฑ๊ณตํ–ˆ๋‹ค. ๋งŒ์„ธ๐Ÿ˜‹๐Ÿ˜‹ ๋‚˜๋„ ์ฝ”๋žฉ ํ”„๋กœ ๊ทธ๋ƒฅ ๋Œ๋ฆฌ๊ณ  ์‹ถ์–ด์ง„๋‹ค. 3ํ•™๋…„ ๋•Œ๋Š” ์ •๋ง ํ•„์ˆ˜์ผ์ง€๋„ ๋ชจ๋ฅด๊ฒ ๋‹ค.
๐Ÿ“Œ 0์€ Click์ด๊ณ , 1์€ Cart์ด๊ณ , 2๋Š” Order์ด๋‹ค. ์™œ ํ•ฉ์ด 100%๊ฐ€ ์•„๋‹Œ์ง€ Reference์— ์•„๋ž˜์ฒ˜๋Ÿผ ๋‚˜์™€์žˆ์—ˆ๋Š”๋ฐ ์™„๋ฒฝํžˆ ์ดํ•ด๊ฐ€ ๋˜์ง€๋Š” ์•Š๋Š”๋‹ค.

In training set 93% of sessions are clicks, 16% of sessions are carts and 10% of sessions are orders on average. Those numbers don't add up to 100 because they are averages calculated on all sessions. They have 12, 10 and 8 standard deviations respectively

6. ์ดํ›„์— ๋ชจ๋ธ๋ง ๊ณผ์ •์—์„œ ๋ฐœ์ƒํ•  ์ˆ˜ ์žˆ๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค๋Š”๋ฐ?
๐Ÿ“Œ ์ผ์ „์— 1110 ํšŒ์˜์—์„œ ํšจ์ค€์˜ค๋น ๊ฐ€ ๋งํ–ˆ๋˜ ๋‚ด์šฉ์ด ์—ฌ๊ธฐ์„œ๋„ ์žˆ๋Š” ๊ฒƒ ๊ฐ™๋‹ค. ์•„๋ž˜๋Š” Reference์—์„œ ๋‚˜์˜จ ๋‚ด์šฉ์„ ๊ทธ๋Œ€๋กœ ์˜ฎ๊ธด ๊ฒƒ์ด๋‹ค. ์ด๊ฒƒ๋งŒ ์ฝ์–ด์„œ๋Š” ์†”์งํžˆ ์ •ํ™•ํžˆ ์ดํ•ด๋Š” ์•ˆ ๊ฐ„๋‹ค. ์ผ๋‹จ ๊ธฐ๋กํ•ด๋‘ฌ์•ผ๊ฒ ๋‹ค. ๐Ÿ‘€๐Ÿ‘€

Some of the sessions might not have any clicks, carts or orders but the statistics below doesn't include their missing event types. The highlight is, some of the sessions in test set can only have clicks, carts or orders, but training set sessions are more heterogeneous. Homogeneous sessions in training set are click-only sessions. This discrepancy could be a problem during modelling.

๐Ÿ“Œ Reference์—์„œ ๋‹ค๋ฅธ ๋ฌธ์ œ ๋‘ ๊ฐ€์ง€๋ฅผ ๋˜ ์ œ๊ธฐํ•˜๋Š”๋ฐ ์ด๊ฒƒ๋„ ์ดํ•ด๋Š” ์•ˆ๊ฐ€์ง€๋งŒ ๋ณต๋ถ™ํ•ด๋ณด๊ฒ ๋‹ค.

  • Cart์™€ Order๋กœ ์‹œ์ž‘ํ•˜๋Š” 1% ๋ฏธ๋งŒ์˜ ๊ทน์†Œ์ˆ˜ ์„ธ์…˜๋“ค์ด ์ž˜๋ ค๋‚˜๊ฐˆ ์ˆ˜ ์žˆ๋‹ค๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค.
  • truncation ๋•Œ๋ฌธ์— ํ…Œ์ŠคํŠธ ์…‹์˜ ์„ธ์…˜๋“ค์ด Order๋กœ ๋œ ๋๋‚˜๊ฒŒ ๋œ๋‹ค?

Another important thing to consider is how sessions start and end. There are two interesting things here. First, sessions are supposed to start with clicks but very few of them start with carts or orders. Those sessions are less than 1% and they might be truncated from their beginning so they could fit into the selected time frame. The other thing is, sessions in test set are less likely to end with an order because of the truncation. Truncated timesteps in test set are more likely order events.

๐Ÿ“Œ ์ดํ›„์— Reference์—์„œ Ground Truth์— ๊ด€ํ•œ ๋‚ด์šฉ์ด ๋‚˜์˜ค๋Š”๋‹ค. ์ž˜ ๋ชจ๋ฅด๊ฒ ๋‹ค. ์ด๊ฒŒ ๋ญ์ง€?
๊ทธ๋ƒฅ ์–ด๋–ค session์— ์žˆ์–ด์„œ Click, Cart, Order์˜ ํ˜„ํ™ฉ์„ ์‚ดํŽด๋ณธ ํ‘œ์ธ ๊ฒƒ ๊ฐ™๋‹ค. ์ผ๋‹จ ํŒจ์Šคํ•˜๊ฒ ๋‹ค. Evaluation๊ณผ ๊ด€๋ จ๋œ ๋ถ€๋ถ„๋„ ์•„์ง์€ ํŒจ์Šคํ•˜๊ฒ ๋‹ค.


๐Ÿ—“๏ธ 1114

โœ… ์ฐธ๊ณ  ์ฝ”๋“œ 2 Review & ๋”ฐ๋ผํ•ด๋ณด๊ธฐ

1. ๊ฐ ์„ธ์…˜์˜ ํ‰๊ท  ์‹œ๊ฐ„ ํ™•์ธํ•˜๊ธฐ
๐Ÿ“Œ Reference์— ๋‚˜์™€์žˆ๋Š” ํ‰๊ท  ์‹œ๊ฐ„์„ ๊ตฌํ•˜๋Š” ์ฝ”๋“œ๋Š” Unix timestamp๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋˜์–ด์žˆ์–ด์„œ, str ํƒ€์ž…์œผ๋กœ ๋ณ€ํ™˜๋œ ts ์—ด์€ ์กฐ๊ธˆ ์ถ”๊ฐ€ ๊ณผ์ •์„ ๊ฑฐ์ณ์„œ ๊ตฌ๊ฐ„์˜ ๊ธธ์ด๋ฅผ ๊ตฌํ•ด์•ผํ•œ๋‹ค. ์ฝ”๋žฉ์•„ ํ„ฐ์ง€์ง€ ๋ง์•„.. ์•„์‹ธ ์„ฑ๊ณตํ–ˆ๋‹ค!!! ๐Ÿ˜๐Ÿ˜๐Ÿ˜

๐Ÿ“Œ 0๋ถ„๋Œ€์— ๊ฐ€๊นŒ์›Œ๋ณด์ด๋Š” Session์ด ๋„ˆ๋ฌด ๋งŽ์•„ ๋ณด์ธ๋‹ค. ๊ทธ๋ž˜ํ”„๋ฅผ ์กฐ๊ธˆ ํ™•๋Œ€ํ•ด์„œ ๊ทธ๋ ค๋ณผ ์ˆ˜ ์žˆ์„๊นŒ? : 0๋ถ„์—์„œ 1๋ถ„ ์‚ฌ์ด

๐Ÿ“Œ

๐Ÿ“Œ ๊ตฌ๋งคํ•œ ์‚ฌ๋žŒ ํ‰๊ท  ์„ธ์…˜ ์‹œ๊ฐ„ ์–ด๋–ป๊ฒŒ ํ•˜์ง€ => ์•„์ง ๋ชปํ•จ
๐Ÿ“Œ ๊ตฌ๋งคํ•˜์ง€ ์•Š์€ ์‚ฌ๋žŒ ํ‰๊ท  ์„ธ์…˜ ์‹œ๊ฐ„ ์–ด๋–ป๊ฒŒ ํ•˜์ง€ => ์•„์ง ๋ชปํ•จ

โœ… ํšŒ์˜ ๊ธฐ๋ก

๐Ÿ“Œ Notion ํšŒ์˜๋ก

๐Ÿ“Œ ๊ฐœ์ธ ๋ฉ”๋ชจ ๋‚ด์šฉ

EDA ๋ชฉ์ ์„ฑ?, ์˜ˆ์ธก ๊ด€๋ จ?
๊ฐ์ž ์ƒ๊ฐํ•ด ์˜จ ๋ฐฉ๋ฒ•๋ก ..?..?..?..?
1) CF => ์ƒํ’ˆ 185๋งŒ๊ฐœ, ์ด์–ต์ด๋ฐฑ๋งŒ=.., aid ์นผ๋Ÿผ์— ๋„ฃ์–ด๋†“๊ณ  type์— ์ ์ˆ˜๋ฅผ ๋„ฃ์–ด์„œ ๊ณ„์‚ฐ or ๋‹จ์ˆœ ๋„˜๋ฒ„๋ง
์ƒํ’ˆ์— ๋Œ€ํ•ด ๋ช‡๋ฒˆ ๊ด€์‹ฌ์„ ๊ฐ€์กŒ๋Š”์ง€.
์ดํ›„ ์‚ฌ์šฉ์ž๋“ค๋ผ๋ฆฌ ์ฝ”์‚ฌ์ธ ์œ ์‚ฌ๋„ ๊ณ„์‚ฐ => k๋ช… ์œ ์‚ฌ ์‚ฌ์šฉ์ž๋ฝ‘๊ณ  ๊ฐ€์žฅ ๋นˆ๋„๊ฐ€ ๋†’์€ ๊ฑฐ ๋“ฑ๋“ฑ ์œ„์ฃผ๋กœ ์ƒํ’ˆ ๋ฝ‘๊ธฐ
์ฝ”์‚ฌ์ธ์œ ์‚ฌ๋„-> ์šฐ๋ฆฌ๊ฐ€ ์ž„์˜๋กœ ์ ์ˆ˜๋งค๊ธฐ๊ธด ํ•˜์ง€๋งŒ ์ •ํ™•๋„๋งŒ ๋†’์œผ๋ฉด ์žฅ๋•ก? 1:3:10์œผ๋กœ ๋ฐฐ๋ถ„ํ•˜๋Š” ๋“ฑ์˜ ๋ฐฉ๋ฒ•
: ๊ฐ€์žฅ ๊ธฐ์ดˆ, ๋ฉ”๋ชจ๋ฆฌ ์šฉ๋Ÿ‰ ๋„ˆ๋ฌด ์ปค. ์ฝ”๋žฉ ํ”„๋กœ ํ”Œ๋Ÿฌ์Šค?! ๊ธฐ์ดˆ CF๋Š” ์ด๋ ‡๊ฒŒ
multi-objective : ์˜ˆ์ธกํ• ์ˆ˜์žˆ๋Š”๊ฒŒ type๋ฟ์ด๋‹ค.
2) ํ›„๋ณด๊ตฐ ์ƒ์„ฑํ•ด์„œ Ranking ๋งค๊ธฐ๊ธฐ => ํŠน์ง•์ด ์ž˜ ๋‚˜ํƒ€๋‚˜์žˆ๋Š”์ง€ ์•„์ง์€ ์ž˜ ๋ชจ๋ฅด๊ฒ ๋‹ค.
ํด๋ฆญํ•œ ๋ฐ์ดํ„ฐ๊ฐ€ 1์–ต9์ฒœ6๋ฐฑ๋งŒ
์ง์ ‘ ์นดํŠธ์— ์ฒœ์œก๋ฐฑ๋งŒ
์‹œํ‚จ๊ฒŒ 5๋ฐฑ๋งŒ
์นดํŠธ์—๋‹ด์€๊ฒŒ ์˜ค๋”๋ง๋˜์—ˆ๋Š”๊ฐ€๊ฐ€ ์ค‘์š”. ์นดํŠธ์— ์•ˆ ๋‹ด์•˜๋Š”๋ฐ ์‹œํ‚จ ์‚ฌ๋žŒ์ด ์žˆ๋‹ค. ๋ฐ”๋กœ ๋‹ด๊ฑฐ๋‚˜ or ์˜ค๋ฅ˜?
co-visitation candidate generation : cart-orderingํ–ˆ๋‹ค๋Š”๊ฑธ matrix
์ด์ „ ๊ตฌ๋งค, ์žฌ๊ตฌ๋งค ๋ฐ์ดํ„ฐ -> 5๋ฐฑ๋งŒ ์‹œํ‚จ๊ฑฐ ๊ธฐ์ค€?
ํ›„๋ณด๊ตฐ->๋žญํ‚น->์œ ์‚ฌํ•œ ์ƒํ’ˆ ๋งค๊ฒจ์ ธ์„œ ๊ทธ๊ฑฐ ๊ธฐ์ค€์œผ๋กœ ์ถ”์ฒœ
๋ฐ์ดํ„ฐ ์–‘์ด ์ค„์–ด๋“ ๋‹ค๋Š” ์žฅ์ . ๋ฐ์ดํ„ฐ ์–‘์„ ์ค„์—ฌ์•ผํ•˜๋‹ˆ ๊ณผ์ ํ•ฉ..๋ณด๋‹ค๋Š” ๊ณผ์†Œ์ ํ•ฉ? ์žฅ์ ์ด์ž ๋‹จ์ .
3) ๋ชจ๋ธ ๊ธฐ๋ฐ˜. ๋ชจ๋ธ ํ•˜๋‚˜ ์ •ํ•ด์„œ ๊ทธ๋ƒฅ ๋Œ๋ ค๋ฒ„๋ฆฌ๊ธฐ. ์ „์ฒ˜๋ฆฌ๊ฐ€ ์ค‘์š”ํ•˜๊ธด ํ•  ๊ฒƒ ๊ฐ™๋‹ค.
์‹œ๊ฐ„์ด ๊ธธ๋ฉด ๊ธธ์ˆ˜๋ก ์‡ผํ•‘์„ ๋งŽ์ด ํ•œ ์‚ฌ๋žŒ๋“ค?
์‹œ๊ฐ„์ด ์งง์œผ๋ฉด ํ•„์ˆ˜์ ์ธ ๊ฑธ ๋ฐ”๋กœ ๋ฐ”๋กœ ์‚ฌ ๊ฐ„ ์‚ฌ๋žŒ๋“ค?
user ๋ฒ ์ด์ฆˆ๋“œ๋กœ ๊ฐ€๋ฉด -> ์‹œ๊ฐ„์ด ์ค‘์š”?
์‹œ๊ฐ„-> ์š”์ผ?
์ด์ปค๋จธ์Šค-> ์ฃผ์ฐจ๋งˆ๋‹ค ์š”์ผ๋งˆ๋‹ค ์‚ฌ๋žŒ๋“ค์ด ์‚ฌ๋Š” ๊ฒŒ ๋‹ค๋ฅด๋‹ค๋Š” ๋ฐฉ๋ฒ•๋ก . ์ผ์š”์ผ์—๋Š” ํ‰์ผํ•„์ˆ˜ํ’ˆ. ๊ธˆ์š”์ผ์—๋Š” ์†Œ๋น„์žฌ.
=> ์ฒซ ๋ฒˆ์งธ ๋ฐฉ๋ฒ• :
CF. Matrix ๊ตฌ์„ฑ. Time์„ 2๊ฐœ๋กœ ๋ถ„ํ• . ๊ฐ ์„ธ์…˜๋งˆ๋‹ค ์ปฌ๋Ÿผ์ด 3๊ฐœ๊ฐ€ ๋‚˜์˜ค๊ฒŒ.
์š”์ผ 0~6, ์˜ค์ „/์˜คํ›„/์•ผ๊ฐ„, type๋ณ„ ์ ์ˆ˜๋‚˜ count๋กœ
ํ•œ ์ƒํ’ˆ๋งˆ๋‹ค 3๊ฐœ๊ฐ€ ๋‚˜์˜ฌ ์ˆ˜ ์žˆ๋„๋ก ๊ตฌ์„ฑ.
์นผ๋Ÿผ์ด 555๋งŒ๊ฐœ
1300๋งŒ
500๋งŒ

  • ์‹œ๊ณ„์—ด ์ฒ˜๋ฆฌ ๋ฐ ๋ถ„ํ• 
    get_dummies label encoder
    ์š”์ผ(0~6), ์•ผ๊ฐ„/์˜ค์ „/์˜คํ›„(0,1,2)
    ์‚ฌ์ดํ‚ท๋Ÿฐ์—์„œ ์ง€์›ํ•ด์ค€๋‹ค.
profile
๊ฐ€๋ณ๊ฒŒ ์žฌ๋ฐŒ๋˜ ๊ฑฐ ๊ธฐ๋กํ•ด์š”

0๊ฐœ์˜ ๋Œ“๊ธ€