Choi jun hyeok commited on
Commit
f1344c7
ยท
1 Parent(s): c130972

update settings

Browse files
Files changed (3) hide show
  1. .env +1 -0
  2. how_it_works.md +133 -0
  3. visualization_slides.ipynb +0 -0
.env ADDED
@@ -0,0 +1 @@
 
 
1
+ GEMINI_API_KEY = AIzaSyDUK2u7PljRBqzj9lhM6Ydxm4-SdxCU-vY
how_it_works.md ADDED
@@ -0,0 +1,133 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # ์‹ ๋ฌธ๊ณผ๋ฐฉ์†ก ๊ธฐ์‚ฌ ์„ฑ๋Šฅ ์˜ˆ์ธก ๋ชจ๋ธ์˜ ํ•™์Šต ๋ฐ ์ถ”๋ก  ๊ณผ์ •
2
+
3
+ ์ด ๋ฌธ์„œ๋Š” `train_and_save_models.py` ์Šคํฌ๋ฆฝํŠธ๊ฐ€ ์–ด๋–ป๊ฒŒ ๊ธฐ์‚ฌ ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ์กฐํšŒ์ˆ˜ ์˜ˆ์ธก ๋ฐ ์ฃผ์š” ์ฒญ์ค‘ ์—ฐ๋ น๋Œ€ ์˜ˆ์ธก ๋ชจ๋ธ์„ ํ•™์Šต์‹œํ‚ค๊ณ , ํ•™์Šต๋œ ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ถ”๋ก ํ•˜๋Š”์ง€์— ๋Œ€ํ•œ ์ž์„ธํ•œ ์„ค๋ช…์ž…๋‹ˆ๋‹ค. ๋ชจ๋“  ๊ณผ์ •์€ ํ•œ๊ตญ์–ด๋กœ ์„ค๋ช…ํ•˜๋ฉฐ, ์ฝ”๋“œ์˜ ์ฃผ์š” ๊ตฌ์„ฑ ์š”์†Œ์™€ ๋‹จ๊ณ„๋ณ„ ํ๋ฆ„์„ ๋‹ค๋ฃน๋‹ˆ๋‹ค.
4
+
5
+ ## 1. ๊ฐœ์š”
6
+
7
+ ์ด ์ฝ”๋“œ๋Š” "์‹ ๋ฌธ๊ณผ๋ฐฉ์†ก" ํ”„๋กœ์ ํŠธ์˜ ์ผํ™˜์œผ๋กœ, ๊ธฐ์‚ฌ์˜ ์ œ๋ชฉ๊ณผ ๋‚ด์šฉ, ์นดํ…Œ๊ณ ๋ฆฌ ๋“ฑ์˜ ์ •๋ณด๋ฅผ ํ™œ์šฉํ•˜์—ฌ ๋‘ ๊ฐ€์ง€ ์ฃผ์š” ์˜ˆ์ธก์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค:
8
+ - **์กฐํšŒ์ˆ˜ ์˜ˆ์ธก**: ๊ธฐ์‚ฌ์˜ ์˜ˆ์ƒ ์กฐํšŒ์ˆ˜๋ฅผ ์˜ˆ์ธกํ•˜๋Š” ํšŒ๊ท€ ๋ชจ๋ธ.
9
+ - **์ฃผ์š” ์ฒญ์ค‘ ์—ฐ๋ น๋Œ€ ์˜ˆ์ธก**: ๊ธฐ์‚ฌ๋ฅผ ๊ฐ€์žฅ ๋งŽ์ด ์ฝ๋Š” ์—ฐ๋ น๋Œ€๋ฅผ ์˜ˆ์ธกํ•˜๋Š” ๋ถ„๋ฅ˜ ๋ชจ๋ธ.
10
+
11
+ ๋ชจ๋ธ์€ XGBoost (Extreme Gradient Boosting)๋ฅผ ๊ธฐ๋ฐ˜์œผ๋กœ ํ•˜๋ฉฐ, ํ…์ŠคํŠธ ๋ฐ์ดํ„ฐ๋ฅผ TF-IDF (Term Frequency-Inverse Document Frequency)๋กœ ๋ณ€ํ™˜ํ•˜๊ณ , ์นดํ…Œ๊ณ ๋ฆฌ ๋ฐ์ดํ„ฐ๋ฅผ ์›-ํ•ซ ์ธ์ฝ”๋”ฉํ•˜์—ฌ ํŠน์ง•์œผ๋กœ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ํ•™์Šต ๊ณผ์ •์—์„œ๋Š” Optuna๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ•˜์ดํผํŒŒ๋ผ๋ฏธํ„ฐ ํŠœ๋‹์„ ์ˆ˜ํ–‰ํ•˜๋ฉฐ, ๊ณผ์ ํ•ฉ์„ ๋ฐฉ์ง€ํ•˜๊ธฐ ์œ„ํ•ด ์กฐ๊ธฐ ์ข…๋ฃŒ(Early Stopping)๋ฅผ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.
12
+
13
+ ์ถ”๋ก  ์‹œ์—๋Š” ํ•™์Šต๋œ ๋ชจ๋ธ๊ณผ ํŠน์ง• ๋ณ€ํ™˜๊ธฐ๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์ƒˆ๋กœ์šด ๊ธฐ์‚ฌ ๋ฐ์ดํ„ฐ๋ฅผ ์ž…๋ ฅ์œผ๋กœ ๋ฐ›์•„ ์˜ˆ์ธก์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ, ์œ ์‚ฌ ๊ธฐ์‚ฌ ํƒ์ƒ‰ ๊ธฐ๋Šฅ๋„ ํฌํ•จ๋˜์–ด ์žˆ์Šต๋‹ˆ๋‹ค.
14
+
15
+ ## 2. ๋ฐ์ดํ„ฐ ์ค€๋น„
16
+
17
+ ํ•™์Šต์„ ์‹œ์ž‘ํ•˜๊ธฐ ์ „์— ํ•„์š”ํ•œ ๋ฐ์ดํ„ฐ๋ฅผ ๋กœ๋“œํ•˜๊ณ  ์ „์ฒ˜๋ฆฌํ•ฉ๋‹ˆ๋‹ค.
18
+
19
+ ### 2.1 ๋ฐ์ดํ„ฐ ๋กœ๋”ฉ
20
+ - **ํŒŒ์ผ ๊ฒฝ๋กœ**: `./data_csv/` ๋””๋ ‰ํ† ๋ฆฌ์—์„œ ๋‹ค์Œ CSV ํŒŒ์ผ์„ ๋กœ๋“œํ•ฉ๋‹ˆ๋‹ค.
21
+ - `contents.csv`: ๊ธฐ์‚ฌ์˜ ์ œ๋ชฉ, ๋‚ด์šฉ, ์นดํ…Œ๊ณ ๋ฆฌ, ๊ธฐ์‚ฌ ID ๋“ฑ์˜ ๊ธฐ๋ณธ ์ •๋ณด.
22
+ - `article_metrics_monthly.csv`: ๊ธฐ์‚ฌ๋ณ„ ์›”๋ณ„ ์กฐํšŒ์ˆ˜, ๋Œ“๊ธ€ ์ˆ˜, ์ข‹์•„์š” ์ˆ˜ ๋“ฑ์˜ ๋ฉ”ํŠธ๋ฆญ ๋ฐ์ดํ„ฐ.
23
+ - `demographics_merged.csv`: ๊ธฐ์‚ฌ๋ณ„ ์—ฐ๋ น๋Œ€๋ณ„ ์กฐํšŒ์ˆ˜ ๋ฐ์ดํ„ฐ.
24
+ - **ํ™•์ธ**: ํŒŒ์ผ์ด ์กด์žฌํ•˜์ง€ ์•Š์œผ๋ฉด ์˜ค๋ฅ˜๋ฅผ ๋ฐœ์ƒ์‹œํ‚ค๊ณ  ์‹คํ–‰์„ ์ค‘๋‹จํ•ฉ๋‹ˆ๋‹ค.
25
+
26
+ ### 2.2 ๋ฐ์ดํ„ฐ ์ „์ฒ˜๋ฆฌ
27
+ - **๋ฉ”ํŠธ๋ฆญ ์ง‘๊ณ„**: `article_metrics_monthly.csv`์˜ ๋ฐ์ดํ„ฐ๋ฅผ ๊ธฐ์‚ฌ ID๋ณ„๋กœ ๊ทธ๋ฃนํ™”ํ•˜์—ฌ ์ด ์กฐํšŒ์ˆ˜(`views_total`), ์ด ๋Œ“๊ธ€ ์ˆ˜(`comments_total`), ์ด ์ข‹์•„์š” ์ˆ˜(`likes_total`)๋ฅผ ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค.
28
+ - **์ฃผ์š” ์ฒญ์ค‘ ์‹๋ณ„**: `demographics_merged.csv`์—์„œ "์ „์ฒด" ์—ฐ๋ น๋Œ€๋ฅผ ์ œ์™ธํ•˜๊ณ , ๊ฐ ๊ธฐ์‚ฌ๋ณ„๋กœ ์กฐํšŒ์ˆ˜๊ฐ€ ๊ฐ€์žฅ ๋†’์€ ์—ฐ๋ น๋Œ€๋ฅผ `primary_age_group`์œผ๋กœ ์„ ์ •ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋ถ„๋ฅ˜ ๋ชจ๋ธ์˜ ํƒ€๊ฒŸ์ด ๋ฉ๋‹ˆ๋‹ค.
29
+ - **๋ฐ์ดํ„ฐ ๋ณ‘ํ•ฉ**: `contents.csv`๋ฅผ ๊ธฐ์ค€์œผ๋กœ ๋ฉ”ํŠธ๋ฆญ ๋ฐ์ดํ„ฐ์™€ ์ฃผ์š” ์ฒญ์ค‘ ๋ฐ์ดํ„ฐ๋ฅผ ์™ผ์ชฝ ์กฐ์ธ(Left Join)ํ•˜์—ฌ ๋งˆ์Šคํ„ฐ ๋ฐ์ดํ„ฐํ”„๋ ˆ์ž„์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ๋ˆ„๋ฝ๋œ ๊ฐ’์€ 0์œผ๋กœ ์ฑ„์›๋‹ˆ๋‹ค.
30
+
31
+ ์ด ๋‹จ๊ณ„์—์„œ ์ƒ์„ฑ๋œ `df_master` ๋ฐ์ดํ„ฐํ”„๋ ˆ์ž„์€ ๊ธฐ์‚ฌ๋ณ„๋กœ ์ œ๋ชฉ, ๋‚ด์šฉ, ์นดํ…Œ๊ณ ๋ฆฌ, ์ด ์กฐํšŒ์ˆ˜, ์ด ๋Œ“๊ธ€ ์ˆ˜, ์ด ์ข‹์•„์š” ์ˆ˜, ์ฃผ์š” ์—ฐ๋ น๋Œ€๋ฅผ ํฌํ•จํ•ฉ๋‹ˆ๋‹ค.
32
+
33
+ ## 3. ํŠน์ง• ๊ณตํ•™ (Feature Engineering)
34
+
35
+ ๊ธฐ์‚ฌ ๋ฐ์ดํ„ฐ๋ฅผ ๋จธ์‹ ๋Ÿฌ๋‹ ๋ชจ๋ธ์ด ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” ์ˆซ์ž ํŠน์ง•์œผ๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
36
+
37
+ ### 3.1 ํ…์ŠคํŠธ ํŠน์ง• ์ถ”์ถœ
38
+ - **ํ† ํฌ๋‚˜์ด์ €**: Konlpy์˜ Okt๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ…์ŠคํŠธ๋ฅผ ํ˜•ํƒœ์†Œ ๋ถ„์„ํ•ฉ๋‹ˆ๋‹ค. ๋ช…์‚ฌ(Noun)์™€ ๋™์‚ฌ(Verb)๋งŒ ์ถ”์ถœํ•˜๋ฉฐ, ์–ด๊ฐ„ ์ถ”์ถœ(Stemming)์„ ์ ์šฉํ•ฉ๋‹ˆ๋‹ค.
39
+ - **TF-IDF ๋ณ€ํ™˜**: ์ œ๋ชฉ๊ณผ ๋‚ด์šฉ์„ ๊ฒฐํ•ฉํ•œ ํ…์ŠคํŠธ๋ฅผ TfidfVectorizer๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
40
+ - ์ตœ๋Œ€ ํŠน์ง• ์ˆ˜: 5000๊ฐœ.
41
+ - ํ† ํฌ๋‚˜์ด์ €: Okt ๊ธฐ๋ฐ˜ ์‚ฌ์šฉ์ž ์ •์˜ ํ•จ์ˆ˜.
42
+ - ๊ฒฐ๊ณผ: ํฌ์†Œ ํ–‰๋ ฌ `X_text` (ํ…์ŠคํŠธ ํŠน์ง•).
43
+ - **๋ณ‘๋ ฌ ์ฒ˜๋ฆฌ**: ์›๋ž˜ ์ฝ”๋“œ์— ๋ณ‘๋ ฌ ํ† ํฌ๋‚˜์ด์ € ํด๋ž˜์Šค๊ฐ€ ์ •์˜๋˜์–ด ์žˆ์ง€๋งŒ, ์‹ค์ œ๋กœ๋Š” ๋‹จ์ผ ํ”„๋กœ์„ธ์Šค ํ† ํฌ๋‚˜์ด์ €๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ์˜ ๊ฒฝ์šฐ ๋ณ‘๋ ฌํ™”๋ฅผ ๊ณ ๋ คํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
44
+
45
+ ### 3.2 ์นดํ…Œ๊ณ ๋ฆฌ ํŠน์ง• ์ถ”์ถœ
46
+ - **์›-ํ•ซ ์ธ์ฝ”๋”ฉ**: `category` ์—ด์„ OneHotEncoder๋กœ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
47
+ - ์•Œ ์ˆ˜ ์—†๋Š” ์นดํ…Œ๊ณ ๋ฆฌ๋Š” ๋ฌด์‹œํ•ฉ๋‹ˆ๋‹ค.
48
+ - ๊ฒฐ๊ณผ: ํฌ์†Œ ํ–‰๋ ฌ `X_cat` (์นดํ…Œ๊ณ ๋ฆฌ ํŠน์ง•).
49
+
50
+ ### 3.3 ํŠน์ง• ๊ฒฐํ•ฉ
51
+ - ํ…์ŠคํŠธ ํŠน์ง•๊ณผ ์นดํ…Œ๊ณ ๋ฆฌ ํŠน์ง•์„ ์ˆ˜ํ‰์œผ๋กœ ๊ฒฐํ•ฉํ•˜์—ฌ `X_combined` ํ–‰๋ ฌ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ์ตœ์ข… ์ž…๋ ฅ ํŠน์ง• ํ–‰๋ ฌ์ž…๋‹ˆ๋‹ค.
52
+
53
+ ## 4. ํƒ€๊ฒŸ ์ค€๋น„ (Target Preparation)
54
+
55
+ ์˜ˆ์ธกํ•  ํƒ€๊ฒŸ ๋ณ€์ˆ˜๋ฅผ ์ค€๋น„ํ•˜๊ณ , ์œ ํšจํ•œ ์ƒ˜ํ”Œ๋งŒ ํ•„ํ„ฐ๋งํ•ฉ๋‹ˆ๋‹ค.
56
+
57
+ ### 4.1 ์กฐํšŒ์ˆ˜ ํƒ€๊ฒŸ (Regression Target)
58
+ - **๋กœ๊ทธ ๋ณ€ํ™˜**: ์กฐํšŒ์ˆ˜(`views_total`)์˜ ๋ถ„ํฌ๊ฐ€ ์น˜์šฐ์ณ์ ธ ์žˆ์œผ๋ฏ€๋กœ, `np.log1p`๋ฅผ ์ ์šฉํ•˜์—ฌ ๋กœ๊ทธ ๋ณ€ํ™˜ํ•ฉ๋‹ˆ๋‹ค. ์ด๋Š” ๋ชจ๋ธ์˜ ์˜ˆ์ธก ์„ฑ๋Šฅ์„ ํ–ฅ์ƒ์‹œํ‚ค๋ฉฐ, ๋‚˜์ค‘์— `np.expm1`๋กœ ์›๋ž˜ ์Šค์ผ€์ผ๋กœ ๋ณต์›ํ•ฉ๋‹ˆ๋‹ค.
59
+ - 0์ธ ๊ฐ’์€ `log1p`๋กœ ์•ˆ์ „ํ•˜๊ฒŒ ์ฒ˜๋ฆฌ๋ฉ๋‹ˆ๋‹ค.
60
+
61
+ ### 4.2 ์—ฐ๋ น๋Œ€ ํƒ€๊ฒŸ (Classification Target)
62
+ - `primary_age_group`์„ ๋ฌธ์ž์—ด๋กœ ๋ณ€ํ™˜ํ•˜๊ณ , LabelEncoder๋กœ ์ •์ˆ˜ ๋ ˆ์ด๋ธ”๋กœ ์ธ์ฝ”๋”ฉํ•ฉ๋‹ˆ๋‹ค.
63
+ - ์œ ํšจํ•œ ์ƒ˜ํ”Œ ํ•„ํ„ฐ๋ง: ์—ฐ๋ น๋Œ€๊ฐ€ ๋ˆ„๋ฝ๋œ ์ƒ˜ํ”Œ์„ ์ œ์™ธํ•ฉ๋‹ˆ๋‹ค.
64
+
65
+ ### 4.3 ์ตœ์ข… ํ•„ํ„ฐ๋ง
66
+ - ์œ ํšจํ•œ ์ƒ˜ํ”Œ์— ๋Œ€ํ•ด์„œ๋งŒ `X_combined`, `X_text`, ์กฐํšŒ์ˆ˜ ํƒ€๊ฒŸ, ์—ฐ๋ น๋Œ€ ํƒ€๊ฒŸ์„ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.
67
+ - ๊ธฐ์‚ฌ ๋งคํ•‘: ์œ ํšจํ•œ ๊ธฐ์‚ฌ ID์™€ ์ œ๋ชฉ์„ ์ €์žฅํ•˜์—ฌ ๋‚˜์ค‘์— ์œ ์‚ฌ ๊ธฐ์‚ฌ ํƒ์ƒ‰์— ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.
68
+
69
+ ## 5. ๋ชจ๋ธ ํ•™์Šต (Model Training)
70
+
71
+ XGBoost ๋ชจ๋ธ์„ ํ•™์Šต์‹œํ‚ค๊ณ , Optuna๋กœ ํ•˜์ดํผํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ํŠœ๋‹ํ•ฉ๋‹ˆ๋‹ค.
72
+
73
+ ### 5.1 ๋ฐ์ดํ„ฐ ๋ถ„ํ• 
74
+ - ๋ฐ์ดํ„ฐ๋ฅผ ํ›ˆ๋ จ ์„ธํŠธ์™€ ๊ฒ€์ฆ ์„ธํŠธ๋กœ ๋ถ„ํ• ํ•ฉ๋‹ˆ๋‹ค (๊ธฐ๋ณธ: 80% ํ›ˆ๋ จ, 20% ๊ฒ€์ฆ).
75
+ - ์ธตํ™” ์ƒ˜ํ”Œ๋ง(Stratified Sampling)์„ ์ ์šฉํ•˜์—ฌ ์—ฐ๋ น๋Œ€ ๋ถ„ํฌ๋ฅผ ์œ ์ง€ํ•ฉ๋‹ˆ๋‹ค.
76
+
77
+ ### 5.2 ํ•˜์ดํผํŒŒ๋ผ๋ฏธํ„ฐ ํŠœ๋‹
78
+ - **Optuna ์‚ฌ์šฉ**: ์ž๋™ํ™”๋œ ํ•˜์ดํผํŒŒ๋ผ๋ฏธํ„ฐ ์ตœ์ ํ™”๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค.
79
+ - ํšŒ๊ท€ ๋ชจ๋ธ(XGBRegressor): n_estimators, learning_rate, max_depth, subsample, colsample_bytree ๋“ฑ์„ ํŠœ๋‹. ๋ชฉํ‘œ: RMSE ์ตœ์†Œํ™”.
80
+ - ๋ถ„๋ฅ˜ ๋ชจ๋ธ(XGBClassifier): ์œ ์‚ฌํ•œ ํŒŒ๋ผ๋ฏธํ„ฐ๋ฅผ ํŠœ๋‹. ๋ชฉํ‘œ: ๋กœ๊ทธ ์†์‹ค ์ตœ์†Œํ™”.
81
+ - **ํ”„๋ฃจ๋‹**: Optuna์˜ MedianPruner์™€ XGBoostPruningCallback์„ ์‚ฌ์šฉํ•˜์—ฌ ๋น„ํšจ์œจ์ ์ธ ์‹œ๋„๋ฅผ ์กฐ๊ธฐ ์ข…๋ฃŒํ•ฉ๋‹ˆ๋‹ค.
82
+ - ํŠœ๋‹ ํšŸ์ˆ˜: ๊ฐ ๋ชจ๋ธ๋‹น 50ํšŒ (์‹œ๊ฐ„ ์ œํ•œ: 600์ดˆ).
83
+
84
+ ### 5.3 ์ตœ์ข… ๋ชจ๋ธ ํ•™์Šต
85
+ - ์ตœ์  ํ•˜์ดํผํŒŒ๋ผ๋ฏธํ„ฐ๋กœ ์ „์ฒด ๋ฐ์ดํ„ฐ์…‹์— ๋Œ€ํ•ด ๋ชจ๋ธ์„ ํ•™์Šตํ•ฉ๋‹ˆ๋‹ค.
86
+ - **ํšŒ๊ท€ ๋ชจ๋ธ**: ์กฐํšŒ์ˆ˜ ์˜ˆ์ธก. ์กฐ๊ธฐ ์ข…๋ฃŒ๋ฅผ ์ ์šฉํ•˜์—ฌ ๊ณผ์ ํ•ฉ ๋ฐฉ์ง€.
87
+ - **๋ถ„๋ฅ˜ ๋ชจ๋ธ**: ์—ฐ๋ น๋Œ€ ์˜ˆ์ธก. ๋‹ค์ค‘ ํด๋ž˜์Šค ์†Œํ”„ํŠธ๋งฅ์Šค ์†์‹ค ์‚ฌ์šฉ.
88
+ - **ํ‰๊ฐ€**: ๊ฒ€์ฆ ์„ธํŠธ์—์„œ MAE (Mean Absolute Error)์™€ ์ •ํ™•๋„(Accuracy)๋ฅผ ๊ณ„์‚ฐํ•˜์—ฌ ์„ฑ๋Šฅ์„ ๋กœ๊ทธ์— ๊ธฐ๋กํ•ฉ๋‹ˆ๋‹ค.
89
+
90
+ ### 5.4 ์•„ํ‹ฐํŒฉํŠธ ์ €์žฅ
91
+ - ํ•™์Šต๋œ ๋ชจ๋ธ, ๋ฒกํ„ฐ๋ผ์ด์ €, ์ธ์ฝ”๋” ๋“ฑ์„ Pickle ํŒŒ์ผ๋กœ ์ €์žฅํ•ฉ๋‹ˆ๋‹ค.
92
+ - tfidf_vectorizer.pkl: TF-IDF ๋ฒกํ„ฐ๋ผ์ด์ €.
93
+ - onehot_encoder.pkl: ์›-ํ•ซ ์ธ์ฝ”๋”.
94
+ - label_encoder.pkl: ๋ ˆ์ด๋ธ” ์ธ์ฝ”๋”.
95
+ - view_prediction_model.pkl: ์กฐํšŒ์ˆ˜ ์˜ˆ์ธก ๋ชจ๋ธ.
96
+ - age_prediction_model.pkl: ์—ฐ๋ น๋Œ€ ์˜ˆ์ธก ๋ชจ๋ธ.
97
+ - text_features_matrix.pkl: ํ…์ŠคํŠธ ํŠน์ง• ํ–‰๋ ฌ (์œ ์‚ฌ ๊ธฐ์‚ฌ ํƒ์ƒ‰์šฉ).
98
+ - article_mapping.pkl: ๊ธฐ์‚ฌ ID์™€ ์ œ๋ชฉ ๋งคํ•‘.
99
+
100
+ ## 6. ์ถ”๋ก  ๊ณผ์ • (Inference Process)
101
+
102
+ ํ•™์Šต๋œ ๋ชจ๋ธ์„ ์‚ฌ์šฉํ•˜์—ฌ ์ƒˆ๋กœ์šด ๊ธฐ์‚ฌ์— ๋Œ€ํ•ด ์˜ˆ์ธก์„ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. (์ด ์ฝ”๋“œ๋Š” ํ•™์Šต ํŒŒ์ดํ”„๋ผ์ธ๋งŒ ํฌํ•จํ•˜๋ฏ€๋กœ, ์ถ”๋ก ์€ ๋ณ„๋„ ์Šคํฌ๋ฆฝํŠธ์—์„œ ์ˆ˜ํ–‰ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.)
103
+
104
+ ### 6.1 ์ž…๋ ฅ ์ค€๋น„
105
+ - ์ƒˆ๋กœ์šด ๊ธฐ์‚ฌ์˜ ์ œ๋ชฉ, ๋‚ด์šฉ, ์นดํ…Œ๊ณ ๋ฆฌ๋ฅผ ์ž…๋ ฅ๋ฐ›์Šต๋‹ˆ๋‹ค.
106
+ - ํ…์ŠคํŠธ: TF-IDF ๋ฒกํ„ฐ๋ผ์ด์ €๋กœ ๋ณ€ํ™˜.
107
+ - ์นดํ…Œ๊ณ ๋ฆฌ: ์›-ํ•ซ ์ธ์ฝ”๋”๋กœ ๋ณ€ํ™˜.
108
+ - ํŠน์ง• ๊ฒฐํ•ฉ: ํ…์ŠคํŠธ์™€ ์นดํ…Œ๊ณ ๋ฆฌ ํŠน์ง•์„ ๊ฒฐํ•ฉ.
109
+
110
+ ### 6.2 ์˜ˆ์ธก ์ˆ˜ํ–‰
111
+ - **์กฐํšŒ์ˆ˜ ์˜ˆ์ธก**: ํšŒ๊ท€ ๋ชจ๋ธ๋กœ ๋กœ๊ทธ ๋ณ€ํ™˜๋œ ๊ฐ’์„ ์˜ˆ์ธกํ•œ ํ›„, `np.expm1`๋กœ ์›๋ž˜ ์กฐํšŒ์ˆ˜๋กœ ๋ณต์›.
112
+ - **์—ฐ๋ น๋Œ€ ์˜ˆ์ธก**: ๋ถ„๋ฅ˜ ๋ชจ๋ธ๋กœ ํ™•๋ฅ ์„ ์˜ˆ์ธกํ•˜๊ณ , ๋ ˆ์ด๋ธ” ์ธ์ฝ”๋”๋กœ ์›๋ž˜ ์—ฐ๋ น๋Œ€๋กœ ๋””์ฝ”๋”ฉ.
113
+
114
+ ### 6.3 ์ถœ๋ ฅ
115
+ - ์˜ˆ์ธก๋œ ์กฐํšŒ์ˆ˜์™€ ์ฃผ์š” ์—ฐ๋ น๋Œ€๋ฅผ ๋ฐ˜ํ™˜ํ•ฉ๋‹ˆ๋‹ค.
116
+
117
+ ## 7. ์ถ”๊ฐ€ ๊ธฐ๋Šฅ: ์œ ์‚ฌ ๊ธฐ์‚ฌ ํƒ์ƒ‰ (Similar Article Search)
118
+
119
+ ์ฝ”๋“œ์˜ ๋งˆ์ง€๋ง‰ ๋ถ€๋ถ„์—์„œ ์œ ์‚ฌ ๊ธฐ์‚ฌ๋ฅผ ์ฐพ๋Š” ๊ธฐ๋Šฅ์„ ์‹œ์—ฐํ•ฉ๋‹ˆ๋‹ค.
120
+
121
+ - **๋ฐฉ๋ฒ•**: ์ฝ”์‚ฌ์ธ ์œ ์‚ฌ๋„(Cosine Similarity)๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ํ…์ŠคํŠธ ํŠน์ง• ๊ธฐ๋ฐ˜์œผ๋กœ ์œ ์‚ฌํ•œ ๊ธฐ์‚ฌ๋ฅผ ์ฐพ์Šต๋‹ˆ๋‹ค.
122
+ - **์ž…๋ ฅ**: ๊ธฐ์‚ฌ ID.
123
+ - **์ถœ๋ ฅ**: ์ƒ์œ„ N๊ฐœ ์œ ์‚ฌ ๊ธฐ์‚ฌ (๊ธฐ๋ณธ: 5๊ฐœ), ์œ ์‚ฌ๋„ ์ ์ˆ˜ ํฌํ•จ.
124
+ - **์šฉ๋„**: ์ฝ˜ํ…์ธ  ๊ธฐ๋ฐ˜ ์ถ”์ฒœ์ด๋‚˜ ๋ถ„์„์— ํ™œ์šฉ.
125
+
126
+ ## 8. ์‹คํ–‰ ๋ฐ ์ฃผ์˜์‚ฌํ•ญ
127
+
128
+ - **์‹คํ–‰**: `python train_and_save_models.py`๋กœ ์Šคํฌ๋ฆฝํŠธ๋ฅผ ์‹คํ–‰ํ•ฉ๋‹ˆ๋‹ค.
129
+ - **์ข…์†์„ฑ**: Optuna, XGBoost, Konlpy, Scikit-learn ๋“ฑ์ด ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค. `requirements.txt`๋ฅผ ์ฐธ๊ณ ํ•˜์„ธ์š”.
130
+ - **์„ฑ๋Šฅ**: ๋Œ€์šฉ๋Ÿ‰ ๋ฐ์ดํ„ฐ์˜ ๊ฒฝ์šฐ ๋ณ‘๋ ฌ ํ† ํฌ๋‚˜์ด์ง•์„ ๊ณ ๋ คํ•˜์„ธ์š”.
131
+ - **๊ฐœ์„ ์ **: ๋กœ๊ทธ ๋ณ€ํ™˜, ํŠœ๋‹, ์กฐ๊ธฐ ์ข…๋ฃŒ ๋“ฑ์ด ๋ชจ๋ธ ์ •ํ™•๋„๋ฅผ ํ–ฅ์ƒ์‹œํ‚ต๋‹ˆ๋‹ค.
132
+
133
+ ์ด ์„ค๋ช…์€ ์ฝ”๋“œ์˜ ๋ชจ๋“  ์ฃผ์š” ๋‹จ๊ณ„๋ฅผ ์ปค๋ฒ„ํ•ฉ๋‹ˆ๋‹ค. ์ถ”๊ฐ€ ์งˆ๋ฌธ์ด ์žˆ์œผ๋ฉด ์–ธ์ œ๋“ ์ง€ ๋ฌผ์–ด๋ณด์„ธ์š”!
visualization_slides.ipynb ADDED
The diff for this file is too large to render. See raw diff