5.model evaluation and improvement

73
Machine Learning with Python Model Evaluation and Improvement 1

Transcript of 5.model evaluation and improvement

Machine Learningwith Python

Model Evaluation and Improvement

1

ContactsHaesun Park

Email : [email protected]

Meetup: https://www.meetup.com/Hongdae-Machine-Learning-Study/

Facebook : https://facebook.com/haesunrpark

Blog : https://tensorflow.blog

2

BookํŒŒ์ด์ฌ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ๋ฅผํ™œ์šฉํ•œ๋จธ์‹ ๋Ÿฌ๋‹, ๋ฐ•ํ•ด์„ .

(Introduction to Machine Learning with Python, Andreas Muller & Sarah Guido์˜๋ฒˆ์—ญ์„œ์ž…๋‹ˆ๋‹ค.)

๋ฒˆ์—ญ์„œ์˜ 1์žฅ๊ณผ 2์žฅ์€๋ธ”๋กœ๊ทธ์—์„œ๋ฌด๋ฃŒ๋กœ์ฝ์„์ˆ˜์žˆ์Šต๋‹ˆ๋‹ค.

์›์„œ์—๋Œ€ํ•œํ”„๋ฆฌ๋ทฐ๋ฅผ์˜จ๋ผ์ธ์—์„œ๋ณผ์ˆ˜์žˆ์Šต๋‹ˆ๋‹ค.

Github: https://github.com/rickiepark/introduction_to_ml_with_python/

3

๊ต์ฐจ๊ฒ€์ฆ

4

๋ชจ๋ธํ‰๊ฐ€

๋น„์ง€๋„ํ•™์Šต์˜ํ‰๊ฐ€๋Š”์ •์„ฑ์ ์ด๋ฏ€๋กœ์ง€๋„ํ•™์Šต์˜๋ฌธ์ œ์—์ง‘์ค‘

train_test_split ร  fit ร  score

๊ต์ฐจ๊ฒ€์ฆ, R2 ์ด์™ธ์˜์ง€ํ‘œ๋“ฑ์„๋ฐฐ์›๋‹ˆ๋‹ค. 5

๊ต์ฐจ๊ฒ€์ฆcross-validation

k-๊ฒน๊ต์ฐจ๊ฒ€์ฆk-fold cross-validation (k=5 or k=10)

1. ํ›ˆ๋ จ๋ฐ์ดํ„ฐ๋ฅผ k๊ฐœ์˜๋ถ€๋ถ„์ง‘ํ•ฉ(ํด๋“œ)์œผ๋กœ๋‚˜๋ˆ•๋‹ˆ๋‹ค.

2. ์ฒซ๋ฒˆ์งธํด๋“œ๋ฅผํ…Œ์ŠคํŠธ์„ธํŠธ๋กœํ•˜๊ณ ๋‚˜๋จธ์ง€ํด๋“œ๋กœ๋ชจ๋ธ์„ํ›ˆ๋ จ์‹œํ‚ต๋‹ˆ๋‹ค.

3. ํ…Œ์ŠคํŠธํด๋“œ๋ฅผ๋ฐ”๊พธ์–ด๊ฐ€๋ฉฐ๋ชจ๋“ ํด๋“œ๊ฐ€์‚ฌ์šฉ๋ ๋•Œ๊นŒ์ง€๋ฐ˜๋ณตํ•ฉ๋‹ˆ๋‹ค.

6

Othersํ™€๋“œ์•„์›ƒHoldout LOOCVleave-one-out cross-validation

7

2-way Holdout

k=n CV

cross_val_score

8

๋ชจ๋ธ, ๋ฐ์ดํ„ฐ, ํƒ€๊นƒ

๊ธฐ๋ณธํด๋“œ์ˆ˜ : 3

ํด๋“œ์ˆ˜๋ณ€๊ฒฝ

๊ต์ฐจ๊ฒ€์ฆ์˜์žฅ์ 

train_test_split๋Š”๋ฌด์ž‘์œ„๋กœ๋ฐ์ดํ„ฐ๋ฅผ๋‚˜๋ˆ„๊ธฐ๋•Œ๋ฌธ์—์šฐ์—ฐํžˆํ‰๊ฐ€๊ฐ€์ข‹๊ฒŒํ˜น์€๋‚˜์˜๊ฒŒ๋‚˜์˜ฌ์ˆ˜์žˆ์Œร ๋ชจ๋“ ํด๋“œ๊ฐ€ํ…Œ์ŠคํŠธ๋Œ€์ƒ์ด๋˜๊ธฐ๋•Œ๋ฌธ์—๊ณตํ‰ํ•จ

train_test_split๋Š”๋ณดํ†ต 70%~80%๋ฅผํ›ˆ๋ จ์—์‚ฌ์šฉํ•จร  10๊ฒน๊ต์ฐจ๊ฒ€์ฆ์€ 90%๋ฅผํ›ˆ๋ จ์—์‚ฌ์šฉํ•˜๊ธฐ๋•Œ๋ฌธ์—์ •ํ™•ํ•œํ‰๊ฐ€๋ฅผ์–ป์Œ

๋ชจ๋ธ์ดํ›ˆ๋ จ๋ฐ์ดํ„ฐ์—์–ผ๋งˆ๋‚˜๋ฏผ๊ฐํ•œ์ง€๊ฐ€๋Š ํ• ์ˆ˜์žˆ์Œ[1, 0.967, 0.933, 0.9, 1] ร  90~100% Accuracy

[๋‹จ์ ]: ๋ฐ์ดํ„ฐ๋ฅผํ•œ๋ฒˆ๋‚˜๋ˆ„์—ˆ์„๋•Œ๋ณด๋‹ค k๊ฐœ์˜๋ชจ๋ธ์„๋งŒ๋“œ๋ฏ€๋กœ k๋ฐฐ๋Š๋ฆผ

[์ฃผ์˜]: cross_val_score๋Š”๊ต์ฐจ๊ฒ€์ฆ๋™์•ˆ๋งŒ๋“ ๋ชจ๋ธ์„๋ฐ˜ํ™˜ํ•˜์ง€์•Š์Šต๋‹ˆ๋‹ค!9

๊ต์ฐจ๊ฒ€์ฆ์˜ํ•จ์ •

3-๊ฒน๊ต์ฐจ๊ฒ€์ฆ์ผ๊ฒฝ์šฐํ…Œ์ŠคํŠธ์„ธํŠธ์—๋Š”ํ•œ์ข…๋ฅ˜์˜๋ถ“๊ฝƒ๋งŒํฌํ•จ๋ฉ๋‹ˆ๋‹ค.

10

KFold(n_splits=3)

๊ณ„์ธต๋ณ„ k-๊ฒน๊ต์ฐจ๊ฒ€์ฆStratified k-fold CV

11

๋ถ„๋ฅ˜๋ฌธ์ œ์ผ๊ฒฝ์šฐ cross_val_score๋Š”๊ธฐ๋ณธ์ ์œผ๋กœ StratifiedKFold()๋ฅผ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. ํšŒ๊ท€์—์„œ๋Š” KFold()๋ฅผ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

๊ต์ฐจ๊ฒ€์ฆ๋ถ„ํ• ๊ธฐ

๋ถ„๋ฅ˜์— KStratifiedFold() ๋Œ€์‹ ๊ธฐ๋ณธ KFold()๋ฅผ์ ์šฉํ•˜๊ธฐ์œ„ํ•ด cv ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

12

๋ถ„๋ฅ˜์™€๊ธฐ๋ณธ KFold()

13StratifiedKFold(n_splits=3): [0.961, 0.922, 0.958]

LOOCVleave-one-out cross-validation

k=n ์ธ k-๊ฒน๊ต์ฐจ๊ฒ€์ฆ

๋ฐ์ดํ„ฐ์…‹์ดํด๋•Œ๋Š”์‹œ๊ฐ„์ด์˜ค๋ž˜๊ฑธ๋ฆฌ์ง€๋งŒ, ์ž‘์€๋ฐ์ดํ„ฐ์…‹์—์„œ๋Š”์ด๋”ฐ๊ธˆ์ข‹์Œ.

14

์ž„์˜๋ถ„ํ• ๊ต์ฐจ๊ฒ€์ฆshuffle-split CV

ํ›ˆ๋ จ์„ธํŠธํฌ๊ธฐ : train_size, ํ…Œ์ŠคํŠธ์„ธํŠธํฌ๊ธฐ : test_size, ํด๋“œ์ˆ˜ : n_splits

ShuffleSplit(train_size=5, test_size=2, n_splits=4)

15

ShuffleSplittest_size, train_size์—๋น„์œจ์„์ž…๋ ฅํ• ์ˆ˜์žˆ์Œ

test_size + train_size < 1 ์ผ๊ฒฝ์šฐ๋ถ€๋ถ„์ƒ˜ํ”Œ๋งsubsampling์ด๋จ

๋ถ„๋ฅ˜์—์‚ฌ์šฉํ• ์ˆ˜์žˆ๋Š” StratifiedShuffleSplit๋„์žˆ์Œ

16

๊ทธ๋ฃน๋ณ„๊ต์ฐจ๊ฒ€์ฆ

ํƒ€๊นƒ์—๋”ฐ๋ผํด๋“œ๋ฅผ๋‚˜๋ˆ„์ง€์•Š๊ณ ์ž…๋ ฅํŠน์„ฑ์—๋”ฐ๋ผํด๋“œ๋ฅผ๋‚˜๋ˆ„์–ด์•ผํ• ๊ฒฝ์šฐ

์˜ˆ๋ฅผ๋“ค์–ด 100์žฅ์˜์‚ฌ์ง„๋ฐ์ดํ„ฐ๋กœ์‚ฌ๋žŒ์˜ํ‘œ์ •์„๋ถ„๋ฅ˜ํ•˜๋Š”๋ฌธ์ œ์—์„œํ•œ์‚ฌ๋žŒ์ดํ›ˆ๋ จ์„ธํŠธ์™€ํ…Œ์ŠคํŠธ์„ธํŠธ์—๋ชจ๋‘๋‚˜ํƒ€๋‚ ๊ฒฝ์šฐ๋ถ„๋ฅ˜๊ธฐ์˜์„ฑ๋Šฅ์„์ •ํ™•ํžˆ์ธก์ •ํ• ์ˆ˜์—†์Šต๋‹ˆ๋‹ค.(์˜๋ฃŒ์ •๋ณด๋‚˜์Œ์„ฑ์ธ์‹๋“ฑ์—์„œ๋„)

์ž…๋ ฅ๋ฐ์ดํ„ฐ์˜๊ทธ๋ฃน์ •๋ณด๋ฅผ๋ฐ›์„์ˆ˜์žˆ๋Š” GroupKFold()๋ฅผ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

cross_val_score(model, X, y, groups, cv=GroupKFold(n_splits=3))...cv.split(X, y, groups)...

17

GroupKFold

18

๊ทธ๋ฆฌ๋“œ์„œ์น˜Grid Search

19

๋งค๊ฐœ๋ณ€์ˆ˜ํŠœ๋‹

๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผํŠœ๋‹ํ•˜์—ฌ๋ชจ๋ธ์˜์ผ๋ฐ˜ํ™”์„ฑ๋Šฅ(๊ต์ฐจ๊ฒ€์ฆ)์„์ฆ๊ฐ€์‹œํ‚ต๋‹ˆ๋‹ค.

Scikit-Learn์—๋Š” GridSearchCV์™€ RandomizedSearchCV๊ฐ€์žˆ์Šต๋‹ˆ๋‹ค.

RBF ์ปค๋„ SVM์˜์—ฌ๋Ÿฌ๊ฐ€์ง€๋งค๊ฐœ๋ณ€์ˆ˜์กฐํ•ฉ์„ํ…Œ์ŠคํŠธํ•ฉ๋‹ˆ๋‹ค.

20

๊ทธ๋ฆฌ๋“œ์„œ์น˜๊ตฌํ˜„

21

gamma์™€ C์—๋Œ€ํ•œ๋ฐ˜๋ณต๋ฃจํ”„

36๊ฐœ์˜๋ชจ๋ธ์ด๋งŒ๋“ค์–ด์ง

๊ฐ€์žฅ์ข‹์€ํ…Œ์ŠคํŠธ์ ์ˆ˜๋ฅผ๊ธฐ๋ก

๊ฒ€์ฆ์„ธํŠธvalidation set

ํ…Œ์ŠคํŠธ์„ธํŠธ๋กœ์—ฌ๋Ÿฌ๊ฐ€์ง€๋งค๊ฐœ๋ณ€์ˆ˜์กฐํ•ฉ์—๋Œ€ํ•ดํ‰๊ฐ€ํ–ˆ๋‹ค๋ฉด์ด๋ชจ๋ธ์ด์ƒˆ๋กœ์šด๋ฐ์ดํ„ฐ๋„๋™์ผํ•œ์„ฑ๋Šฅ์„๋‚ธ๋‹ค๊ณ ์ƒ๊ฐํ•˜๋Š”๊ฒƒ์€๋งค์šฐ๋‚™๊ด€์ ์ธ์ถ”์ •์ž…๋‹ˆ๋‹ค.

์ตœ์ข…ํ‰๊ฐ€๋ฅผ์œ„ํ•ด์„œ๋Š”๋…๋ฆฝ๋œ๋ฐ์ดํ„ฐ์„ธํŠธ๊ฐ€ํ•„์š”ํ•ฉ๋‹ˆ๋‹ค.

๊ฒ€์ฆ์„ธํŠธvalidation set ํ˜น์€๊ฐœ๋ฐœ์„ธํŠธdev set

22

๊ฒ€์ฆ์„ธํŠธ๊ตฌํ˜„

23

ํ›ˆ๋ จ๋ฐ์ดํ„ฐร ํ›ˆ๋ จ๊ฒ€์ฆ์„ธํŠธ, ํ…Œ์ŠคํŠธ์„ธํŠธํ›ˆ๋ จ๊ฒ€์ฆ์„ธํŠธร ํ›ˆ๋ จ์„ธํŠธ, ๊ฒ€์ฆ์„ธํŠธ

๋‘๊ตฌํ˜„์˜๊ฒฐ๊ณผ๋น„๊ต

๋ชจ๋ธ์‹œ๊ฐํ™”, ํƒ์ƒ‰์ ๋ถ„์„, ๋ชจ๋ธ์„ ํƒ์—ํ…Œ์ŠคํŠธ์„ธํŠธ๋ฅผ์‚ฌ์šฉํ•˜๋ฉด์•ˆ๋ฉ๋‹ˆ๋‹ค.

24

๊ฒ€์ฆ์„ธํŠธ + cross_val_score

25

๋งค๊ฐœ๋ณ€์ˆ˜ํƒ์ƒ‰์˜์ „์ฒด๊ณผ์ •

26

GridSearchCV๊ต์ฐจ๊ฒ€์ฆ์„์‚ฌ์šฉํ•œ๊ทธ๋ฆฌ๋“œ์„œ์น˜

๊ฒ€์ƒ‰ํ•˜๋ ค๋Š”๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผํ‚ค๋กœํ•˜๋Š”๋”•์…”๋„ˆ๋ฆฌ๋ฅผ์‚ฌ์šฉํ•จ

27

๋ชจ๋ธ, ๋งค๊ฐœ๋ณ€์ˆ˜๊ทธ๋ฆฌ๋“œ, ํด๋“œ์ˆ˜ํšŒ๊ท€:KFold, ๋ถ„๋ฅ˜:StratifiedKFold

fit, predict, score, predict_proba, decision_function ์ œ๊ณต

๊ทธ๋ฆฌ๋“œ์„œ์น˜๋ชจ๋ธํ…Œ์ŠคํŠธ

GridSearchCV์—์‚ฌ์šฉํ•˜์ง€์•Š์€ํ…Œ์ŠคํŠธ์„ธํŠธ๋กœํ‰๊ฐ€

28

ํ›ˆ๋ จ๋ฐ์ดํ„ฐ๋กœ๊ต์ฐจ๊ฒ€์ฆํ•œ์ ์ˆ˜

๊ฒฐ๊ณผ๋ถ„์„

๊ฐ„๊ฒฉ์„๋„“๊ฒŒํ•˜์—ฌ๊ทธ๋ฆฌ๋“œ์„œ์น˜๋ฅผ์‹œ์ž‘ํ•˜๊ณ ๊ฒฐ๊ณผ๋ฅผ๋ถ„์„ํ•ด๊ฒ€์ƒ‰์˜์˜์„์กฐ์ •ํ•ฉ๋‹ˆ๋‹ค.

RandomizedSearchCV๋Š”๋งค๊ฐœ๋ณ€์ˆ˜์กฐํ•ฉ์ด๋งค์šฐ๋งŽ๊ฑฐ๋‚˜ C์™€๊ฐ™์ด์—ฐ์†ํ˜•๊ฐ’์„์กฐ์ •ํ• ๋•Œ๋งŽ์ด์‚ฌ์šฉ๋ฉ๋‹ˆ๋‹ค.

29

grid_search.cv_results_

๋ถ€์ ์ ˆํ•œ๊ทธ๋ฆฌ๋“œ

30

C์—๋”ฐ๋ฅธ๋ณ€ํ™”์—†์Œ ๊ฒ€์ƒ‰์˜์—ญ์กฐ์ •ํ•„์š”

๋น„๋Œ€์นญ๊ทธ๋ฆฌ๋“œ์„œ์น˜

๋‹ค๋ฅธ๋งค๊ฐœ๋ณ€์ˆ˜์—์˜ํ•ด์„ ํƒ์ ์œผ๋กœ๊ทธ๋ฆฌ๋“œ์„œ์น˜๋ฅผ์ˆ˜ํ–‰ํ• ์ˆ˜์žˆ์Šต๋‹ˆ๋‹ค.

๋งค๊ฐœ๋ณ€์ˆ˜๊ทธ๋ฆฌ๋“œ๋ฅผ๋”•์…”๋„ˆ๋ฆฌ์˜๋ฆฌ์ŠคํŠธ๋กœ๋งŒ๋“ญ๋‹ˆ๋‹ค.

31

linear ์ปค๋„์ผ๊ฒฝ์šฐ์—๋Š” gamma ๋งค๊ฐœ๋ณ€์ˆ˜๋ฅผ์ง€์ •ํ•˜์ง€์•Š์Šต๋‹ˆ๋‹ค.

๋น„๋Œ€์นญ๊ทธ๋ฆฌ๋“œ์„œ์น˜๊ฒฐ๊ณผ

32

ShufflSplit()

์ค‘์ฒฉ๊ต์ฐจ๊ฒ€์ฆnested CV

ํ›ˆ๋ จ๋ฐ์ดํ„ฐ(cross_val_score) ร ํ›ˆ๋ จ์„ธํŠธ(SVC)์™€ํ…Œ์ŠคํŠธ์„ธํŠธร ํ‰๊ฐ€

ํ›ˆ๋ จ๋ฐ์ดํ„ฐร ํ›ˆ๋ จ์„ธํŠธ(GridSearchCV) ร ํŠœ๋‹ร ๋ชจ๋ธร ํ…Œ์ŠคํŠธ์„ธํŠธร ํ‰๊ฐ€

ํ›ˆ๋ จ๋ฐ์ดํ„ฐ(cross_val_score) ร ํ›ˆ๋ จ์„ธํŠธ(GridSearchCV)์™€ํ…Œ์ŠคํŠธ์„ธํŠธร ํ‰๊ฐ€

33

corss_val_score + GridSearchCV

34GridSearchCV

cross_val_score

36x5x5=900

๋ณ‘๋ ฌํ™”

๊ทธ๋ฆฌ๋“œ์„œ์น˜๋Š”์—ฐ์‚ฐ์—๋น„์šฉ์ด๋งŽ์ด๋“ค์ง€๋งŒ๋งค๊ฐœ๋ณ€์ˆ˜์กฐํ•ฉ๋งˆ๋‹ค์‰ฝ๊ฒŒ๋ณ‘๋ ฌํ™”๊ฐ€๋Šฅ

GridSearchCV์™€ cross_val_score์˜ n_jobs์—์‚ฌ์šฉํ•  CPU ์ฝ”์–ด์ˆ˜๋ฅผ์ง€์ •ํ• ์ˆ˜์Šต๋‹ˆ๋‹ค(๊ธฐ๋ณธ 1, ์ตœ๋Œ€ -1).

ํ•˜์ง€๋งŒ GridSearchCV์™€ RandomForestClassifier ๊ฐ™์€๋ชจ๋ธ์ด๋™์‹œ์— n_jobs์˜ต์…˜์„์‚ฌ์šฉํ• ์ˆ˜์—†์Šต๋‹ˆ๋‹ค(์ด์ค‘ fork๋กœ๋ฐ๋ชฌํ”„๋กœ์„ธ์Šค๊ฐ€๋˜๋Š”๊ฒƒ์„๋ฐฉ์ง€).

๋งˆ์ฐฌ๊ฐ€์ง€๋กœ cross_val_score์™€ GridSearchCV๋„๋™์‹œ์— n_jobs ์˜ต์…˜์„์‚ฌ์šฉํ• ์ˆ˜์—†์Šต๋‹ˆ๋‹ค.

35

ํ‰๊ฐ€์ง€ํ‘œ์™€์ธก์ •

36

ํ‰๊ฐ€์ง€ํ‘œ

์ผ๋ฐ˜์ ์œผ๋กœํšŒ๊ท€: R2, ๋ถ„๋ฅ˜: ์ •ํ™•๋„๋ฅผ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

๋น„์ฆˆ๋‹ˆ์Šค์ž„ํŒฉํŠธ๋ฅผ๊ณ ๋ คํ•˜์—ฌ๋ชฉํ‘œ๋ฅผ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค(๊ตํ†ต์‚ฌ๊ณ ํšŒ์ˆ˜, ์ž…์›ํ™˜์ž์ˆ˜๋“ฑ)

๋น„์ฆˆ๋‹ˆ์Šค์ง€ํ‘œ๋ฅผ์–ป์œผ๋ ค๋ฉด์šด์˜์‹œ์Šคํ…œ์—์ ์šฉํ•ด์•ผ์•Œ์ˆ˜์žˆ๋Š”๊ฒฝ์šฐ๊ฐ€๋งŽ์œผ๋ฏ€๋กœ๋Œ€๋ฆฌํ• ์ˆ˜์žˆ๋Š”ํ‰๊ฐ€์ง€ํ‘œ๋ฅผ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค(๋ณดํ–‰์ž์ด๋ฏธ์ง€๋ฅผ์‚ฌ์šฉํ•œ์ž์œจ์ฃผํ–‰ํ…Œ์ŠคํŠธ)

์‹œ์Šคํ…œ์˜๋ชฉํ‘œ์—๋”ฐ๋ผ๋ฐฉ๋ฌธ๊ณ ๊ฐ์ด 10% ๋Š˜์–ด๋‚˜๋Š”๋ชจ๋ธ์„์ฐพ์„์ˆ˜์žˆ์ง€๋งŒ๋งค์ถœ์€15% ์ค„์–ด๋“ค์ˆ˜์žˆ์Šต๋‹ˆ๋‹ค(๊ฒฝ์šฐ์—๋”ฐ๋ผ๊ณ ๊ฐ์ด์•„๋‹ˆ๋ผ๋งค์ถœ์„๋น„์ฆˆ๋‹ˆ์Šค์ง€ํ‘œ๋กœ์‚ผ์•„์•ผํ•ฉ๋‹ˆ๋‹ค).

37

์ด์ง„๋ถ„๋ฅ˜

38

์—๋Ÿฌ์˜์ข…๋ฅ˜

์–‘์„ฑํด๋ž˜์Šค(๊ด€์‹ฌ๋Œ€์ƒ)์™€์Œ์„ฑํด๋ž˜์Šค๋กœ๋‚˜๋‰ฉ๋‹ˆ๋‹ค.

์•”์ง„๋‹จ: ์•”(์–‘์„ฑํ…Œ์ŠคํŠธ, ์•…์„ฑ), ์ •์ƒ(์Œ์„ฑํ…Œ์ŠคํŠธ)

์–‘์„ฑํ…Œ์ŠคํŠธ(์•”)๋ฅผ์–‘์„ฑํด๋ž˜์Šค, ์Œ์„ฑํ…Œ์ŠคํŠธ(์ •์ƒ)์„์Œ์„ฑํด๋ž˜์Šค๋ผํ• ๋•Œ์ •์ƒ์„์–‘์„ฑํด๋ž˜์Šค๋กœ๋ถ„๋ฅ˜(๊ฑฐ์ง“์–‘์„ฑfalse positive): ์ถ”๊ฐ€์ ์ธ๊ฒ€์‚ฌ๋™๋ฐ˜์•”์„์Œ์„ฑํด๋ž˜์Šค๋กœ๋ถ„๋ฅ˜(๊ฑฐ์ง“์Œ์„ฑfalse negative): ๊ฑด๊ฐ•์„ํ•ด์นจ

๊ฑฐ์ง“์–‘์„ฑ์„ํƒ€์ž… I ์—๋Ÿฌ, ๊ฑฐ์ง“์Œ์„ฑ์„ํƒ€์ž… II ์—๋Ÿฌ๋ผ๊ณ ๋„ํ•ฉ๋‹ˆ๋‹ค.

๊ฑฐ์ง“์–‘์„ฑ๊ณผ๊ฑฐ์ง“์Œ์„ฑ์ด๋น„์Šทํ•œ๊ฒฝ์šฐ๋Š”๋“œ๋ฌผ๋ฉฐ์˜ค๋ฅ˜๋ฅผ๋น„์šฉ์œผ๋กœํ™˜์‚ฐํ•˜์—ฌ๋น„์ฆˆ๋‹ˆ์Šค์ ์ธํŒ๋‹จ์„ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

39

๋ถˆ๊ท ํ˜•๋ฐ์ดํ„ฐ์…‹

์˜ˆ) ๊ด‘๊ณ ๋…ธ์ถœ์ˆ˜์™€ํด๋ฆญ์ˆ˜: 99 vs 1 (ํ˜„์‹ค์—์„œ๋Š” 0.1% ๋ฏธ๋งŒ์ž…๋‹ˆ๋‹ค)

๋ฌด์กฐ๊ฑด โ€˜ํด๋ฆญ์•„๋‹˜โ€™์œผ๋กœ์˜ˆ์ธกํ•˜๋ฉด 99%์˜์ •ํ™•๋„๋ฅผ๊ฐ€์ง„๋ถ„๋ฅ˜๊ธฐ๊ฐ€๋ฉ๋‹ˆ๋‹ค.

๋ถˆ๊ท ํ˜•ํ•œ๋ฐ์ดํ„ฐ์…‹์—์„œ๋Š”์ •ํ™•๋„๋งŒ์œผ๋กœ๋Š”๋ชจ๋ธ์ด์ง„์งœ์ข‹์€์ง€๋ชจ๋ฆ…๋‹ˆ๋‹ค.

40

์ˆซ์ž 9๋Š” 1, ๋‚˜๋จธ์ง€๋Š” 0์ธํƒ€๊นƒ๊ฐ’

๋”๋ฏธ vs ๊ฒฐ์ •ํŠธ๋ฆฌ

41

๋ฌด์กฐ๊ฑด 9์•„๋‹˜(0)์œผ๋กœ์˜ˆ์ธก์„๋งŒ๋“ฆ

๋”๋ฏธ vs ๋กœ์ง€์Šคํ‹ฑํšŒ๊ท€

42

strategy ๊ธฐ๋ณธ๊ฐ’: stratifiedํด๋ž˜์Šค๋น„์œจ(10%:1, 90%:0) ๋Œ€๋กœ๋žœ๋คํ•˜๊ฒŒ์˜ˆ์ธก

์˜ค์ฐจํ–‰๋ ฌconfusion matrix

43

ํƒ€๊นƒ๊ฐ’, ์˜ˆ์ธก๊ฒฐ๊ณผ

๊ฑฐ์ง“์–‘์„ฑ

๊ฑฐ์ง“์Œ์„ฑ

๋”๋ฏธ๋ถ„๋ฅ˜๊ธฐ์˜์˜ค์ฐจํ–‰๋ ฌ

44

๋ฌด์กฐ๊ฑด โ€˜9์•„๋‹˜โ€™์œผ๋กœ์˜ˆ์ธก(TN,FN)

๋น„์Šทํ•œ FP, FN

์ •ํ™•๋„accuracy, ์ •๋ฐ€๋„precision, ์žฌํ˜„์œจrecall

์ •ํ™•๋„ =๐‘‡๐‘ƒ + ๐‘‡๐‘

๐‘‡๐‘ƒ + ๐‘‡๐‘ + ๐น๐‘ƒ + ๐น๐‘

์ •๋ฐ€๋„ =๐‘‡๐‘ƒ

๐‘‡๐‘ƒ + ๐น๐‘ƒ

์žฌํ˜„์œจ =๐‘‡๐‘ƒ

๐‘‡๐‘ƒ + ๐น๐‘

45

์–‘์„ฑ์œผ๋กœ์˜ˆ์ธก๋œ๊ฒƒ์ค‘์ง„์งœ์–‘์„ฑ์˜๋น„์œจ(์–‘์„ฑ์˜ˆ์ธก๋„)ex) ์‹ ์•ฝ์˜ํšจ๊ณผ์ธก์ •

์ง„์งœ์–‘์„ฑ์ค‘์–‘์„ฑ์œผ๋กœ์˜ˆ์ธก๋œ๋น„์œจ(๋ฏผ๊ฐ๋„, ์ ์ค‘๋ฅ , ์ง„์งœ์–‘์„ฑ๋น„์œจ-TPR)ex) ์•”์ง„๋‹จ

์ •๋ฐ€๋„ <> ์žฌํ˜„์œจ

์ •๋ฐ€๋„ =๐‘‡๐‘ƒ

๐‘‡๐‘ƒ + ๐น๐‘ƒ

์žฌํ˜„์œจ =๐‘‡๐‘ƒ

๐‘‡๐‘ƒ + ๐น๐‘

46

๋ชจ๋‘์–‘์„ฑ์œผ๋กœ์˜ˆ์ธกํ•˜๋ฉดFP๊ฐ€์ปค์ ธ์ •๋ฐ€๋„๊ฐ€๋‚ฎ์•„์ง€๊ณ 

FN์€ 0์ด๋˜์–ด์žฌํ˜„์œจ์€์™„๋ฒฝํ•ด์ง‘๋‹ˆ๋‹ค.

์–‘์„ฑํ•˜๋‚˜๋งŒ์„์ œ๋Œ€๋กœ์˜ˆ์ธกํ•˜๋ฉดFP๋Š” 0์ด์–ด์„œ์ •๋ฐ€๋„๋Š” 1์ด๋˜์ง€๋งŒ

FN์ด์ปค์ ธ์žฌํ˜„์œจ์€๋‚ฎ์•„์ง‘๋‹ˆ๋‹ค.

f-์ ์ˆ˜f-score

f1-์ ์ˆ˜๋ผ๊ณ ๋„ํ•ฉ๋‹ˆ๋‹ค.์ •๋ฐ€๋„์™€์žฌํ˜„์œจ์˜์กฐํ™”ํ‰๊ท ์œผ๋กœ๋ถˆ๊ท ํ˜•๋ฐ์ดํ„ฐ์…‹์—์ข‹์ง€๋งŒ์„ค๋ช…ํ•˜๊ธฐ์–ด๋ ต์Šต๋‹ˆ๋‹ค.

๐น = 2ร—์ •๋ฐ€๋„ร—์žฌํ˜„์œจ

์ •๋ฐ€๋„+์žฌํ˜„์œจ

47

f-์ ์ˆ˜์˜๋ถ„๋ชจ๊ฐ€ 0์ด๋จ

์ •ํ™•๋„0.800.92

classification_report + pred_most_frequent

48

์ง„์งœํƒ€๊นƒ๊ฐ’

์–‘์„ฑํด๋ž˜์Šค๋ฅผ โ€˜9์•„๋‹˜โ€™์œผ๋กœ๋ฐ”๊พธ์—ˆ์„๋•Œ์ ์ˆ˜

pred_most_frequent๋Š”๋ชจ๋“ ๋ฐ์ดํ„ฐ๋ฅผ โ€˜9์•„๋‹˜โ€™์œผ๋กœ์˜ˆ์ธกํ•˜๊ธฐ๋•Œ๋ฌธ์—์–‘์„ฑํด๋ž˜์Šค๋ฅผ๋งž์ถ˜๊ฒƒ์ด์—†์Œ

classification_report + pred_dummy, pred_logreg

49

์–ด๋–คํด๋ž˜์Šค๋ฅผ์–‘์„ฑํด๋ž˜์Šค๋กœ์„ ํƒํ•˜๋Š”์ง€๊ฐ€์ค‘์š”

๋ถˆํ™•์‹ค์„ฑ

decision_function()์€์„ ํ˜•ํŒ๋ณ„์‹์ด 0๋ณด๋‹คํฌ๋ฉด์–‘์„ฑ์œผ๋กœ,

predict_proba()๋Š”์„ ํ˜•ํŒ๋ณ„์‹์—์‹œ๊ทธ๋ชจ์ด๋“œํ•จ์ˆ˜๋ฅผ์ ์šฉํ•˜์—ฌ 0.5๋ณด๋‹คํฌ๋ฉด์–‘์„ฑ์œผ๋กœํŒ๋‹จํ•ฉ๋‹ˆ๋‹ค.

์ดํ•จ์ˆ˜๋“ค์˜๋ฐ˜ํ™˜๊ฐ’์ดํด์ˆ˜๋ก์˜ˆ์ธก์—๋Œ€ํ•œํ™•์‹ ์ด๋†’๋‹ค๊ณ ๊ฐ„์ฃผํ• ์ˆ˜์žˆ์Šต๋‹ˆ๋‹ค.

50

decision_function() > 0

51

์•…์„ฑ

์•…์„ฑ์ด์–‘์„ฑํด๋ž˜์Šค์ผ๊ฒฝ์šฐ๋ชจ๋“ ์•…์„ฑ์„์žก์•„๋‚ด๊ธฐ์œ„ํ•ด์žฌํ˜„์œจ์„๋†’์—ฌ์•ผํ•ฉ๋‹ˆ๋‹ค.

decision_function() > -0.8

52

์•…์„ฑ

์‹ค์ „์—์„œ๋Š”ํ…Œ์ŠคํŠธ์„ธํŠธ๋ฅผ์‚ฌ์šฉํ•ด์„œ๋Š”์•ˆ๋ฉ๋‹ˆ๋‹ค!

model.predict_proba(X_test) > 0.45

์ •๋ฐ€๋„-์žฌํ˜„์œจ๊ณก์„ 

์ •๋ฐ€๋„์™€์žฌํ˜„์œจ์˜ํŠธ๋ ˆ์ด๋“œ์˜คํ”„๋ฅผ์กฐ์ •

decision_function๊ณผ predict_proba ํ•จ์ˆ˜๋ฅผ์ด์šฉํ•˜์—ฌ์šด์˜ํฌ์ธํŠธoperating point ๊ฒฐ์ •

53

decision_function์˜๊ฐ๋‹จ๊ณ„

(0.75, 0.4)

(0.52, 0.4)

ํ•˜๋‚˜์˜ f1-์ ์ˆ˜ ์˜ค๋ฅธ์ชฝ์œ„์—๊ฐ€๊นŒ์šธ์ˆ˜๋ก์ข‹์Œ

RandomForestClassifier vs SVC

54

predict_proba์˜๊ฒฐ๊ณผ์ค‘์–‘์„ฑํด๋ž˜์Šค(๋ฐฐ์—ด์ธ๋ฑ์Šค 1)์—๋Œ€ํ•œํ™•๋ฅ ๊ฐ’์„์ „๋‹ฌํ•ฉ๋‹ˆ๋‹ค.

์žฌํ˜„์œจ์ด๋‚˜์ •๋ฐ€๋„๊ฐ€๊ทน๋‹จ์ผ๊ฒฝ์šฐ๋žœ๋คํฌ๋ ˆ์ŠคํŠธ๊ฐ€๋”๋‚ซ์Šต๋‹ˆ๋‹ค.

ํ‰๊ท ์ •๋ฐ€๋„average precision

์ •๋ฐ€๋„-์žฌํ˜„์œจ๊ณก์„ ์˜์•„๋žซ๋ถ€๋ถ„๋ฉด์ ์„๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค.

55

ํ‰๊ท ์ •๋ฐ€๋„๋Š”๊ฑฐ์˜๋น„์Šทํ•œ์ˆ˜์ค€

ROC์™€ AUC์ˆ˜์‹ ๊ธฐ์กฐ์ž‘ํŠน์„ฑ(Receiver operating characteristics)

์ง„์งœ์–‘์„ฑ๋น„์œจ(TPR, ์žฌํ˜„์œจ)์—๋Œ€ํ•œ๊ฑฐ์ง“์–‘์„ฑ๋น„์œจ(FPR)์˜๊ทธ๋ž˜ํ”„

sklearn.metrics.roc_curve

์žฌํ˜„์œจ =๐‘‡๐‘ƒ

๐‘‡๐‘ƒ + ๐น๐‘

๐น๐‘ƒ๐‘… =๐น๐‘ƒ

๐น๐‘ƒ + ๐‘‡๐‘

56

roc_curve + SVC

57

์™ผ์ชฝ์œ„์—๊ฐ€๊นŒ์šธ์ˆ˜๋ก์ข‹์Œ๊ฑฐ์ง“์–‘์„ฑ(FP)์€์ ๊ณ ์ง„์งœ์–‘์„ฑ(TP)์€๋†’๊ฒŒ

์ ์ ˆํ•œ์šด์˜ํฌ์ธํŠธ

RandomForestClassifier vs SVC

58

AUCarea under the curve

ROC ๊ณก์„ ์•„๋ž˜์˜๋ฉด์ (like ํ‰๊ท ์ •๋ฐ€๋„)

sklearn.metrics.roc_auc_score

59

ํƒ€๊นƒ๋ ˆ์ด๋ธ”, ์˜ˆ์ธกํ™•๋ฅ 

AUC ํŠน์ง•

๋ถˆ๊ท ํ˜•ํ•œ๋ฐ์ดํ„ฐ์…‹์—๋„์•ˆ์ •์ ์ž„

์žฌํ˜„์œจ =๐‘‡๐‘ƒ

๐‘‡๐‘ƒ + ๐น๐‘

๐น๐‘ƒ๐‘… =๐น๐‘ƒ

๐น๐‘ƒ + ๐‘‡๐‘

๋ถˆ๊ท ํ˜•๋ฐ์ดํ„ฐ์…‹์—์„œ๋„๋ฌด์ž‘์œ„๋กœ์„ ํƒํ•˜๋ฉดTPR, FPR์ด๋น„์Šทํ•ด์ง€๋ฏ€๋กœ ROC ๊ณก์„ ์ดy=x ๊ฐ€๋˜์–ด AUC๋Š” 0.5์—๊ฐ€๊นŒ์›Œ์ง

60

๊ฐ๊ธฐ๋‹ค๋ฅธํ–‰์œผ๋กœ๊ณ„์‚ฐ๋จ

ํด๋ž˜์Šค 0

ํด๋ž˜์Šค 1

๋‹ค์ค‘๋ถ„๋ฅ˜

61

๋‹ค์ค‘๋ถ„๋ฅ˜์˜ํ‰๊ฐ€์ง€ํ‘œ

์ด์ง„๋ถ„๋ฅ˜ํ‰๊ฐ€์ง€ํ‘œ์—์„œ์œ ๋„ํ•œ๊ฒƒ์œผ๋กœ๋ชจ๋“ ํด๋ž˜์Šค์—๋Œ€ํ•ดํ‰๊ท ์„๋ƒ…๋‹ˆ๋‹ค.

๋‹ค์ค‘๋ถ„๋ฅ˜์—์„œ๋„๋ถˆ๊ท ํ˜•ํ•œ๋ฐ์ดํ„ฐ์…‹์—์„œ๋Š”์ •ํ™•๋„๊ฐ€์ข‹์€์ง€ํ‘œ๊ฐ€์•„๋‹™๋‹ˆ๋‹ค.

์†๊ธ€์”จ์ˆซ์ž 10๊ฐœ์—๋Œ€ํ•œ์˜ค์ฐจํ–‰๋ ฌ

62

๋‹ค์ค‘๋ถ„๋ฅ˜์˜์˜ค์ฐจํ–‰๋ ฌ

63

์ˆซ์ž 0์€๊ฑฐ์ง“์Œ์„ฑ(FN) ์—†์Œ

ํด๋ž˜์Šค 0์€๊ฑฐ์ง“์–‘์„ฑ(FP) ์—†์Œ

๋‹ค์ค‘๋ถ„๋ฅ˜๋ฆฌํฌํŠธ

64

๋‹ค์ค‘๋ถ„๋ฅ˜ f1-์ ์ˆ˜

๋‹ค์ค‘๋ถ„๋ฅ˜์šฉ f1-์ ์ˆ˜๋Š”ํ•œํด๋ž˜์Šค๋ฅผ์–‘์„ฑํด๋ž˜์Šค๋กœ๋‘๊ณ ๋‚˜๋จธ์ง€๋ฅผ์Œ์„ฑ์œผ๋กœ๊ฐ„์ฃผํ•˜์—ฌ๊ฐํด๋ž˜์Šค๋งˆ๋‹ค f1-์ ์ˆ˜๋ฅผ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค.

f1_score(y_test, pred, average=โ€œ...โ€)

โ€ข โ€œmacroโ€: ๊ฐ€์ค‘์น˜์—†์ดํ‰๊ท ์„๋ƒ…๋‹ˆ๋‹ค.โ€ข โ€œweightedโ€: ํด๋ž˜์Šค๋ณ„์ƒ˜ํ”Œ์ˆ˜๋กœ๊ฐ€์ค‘์น˜๋ฅผ๋‘์–ดํ‰๊ท ์„๋ƒ…๋‹ˆ๋‹ค.(๋ถ„๋ฅ˜๋ฆฌํฌํŠธ)โ€ข โ€œmicroโ€: ๋ชจ๋“ ํด๋ž˜์Šค์˜ FP, FN, TP๋ฅผํ•ฉํ•˜์—ฌ f1-์ ์ˆ˜๋ฅผ๊ณ„์‚ฐํ•ฉ๋‹ˆ๋‹ค.โ€ข โ€œbinaryโ€: ์ด์ง„๋ถ„๋ฅ˜์—ํ•ด๋‹น, ๊ธฐ๋ณธ๊ฐ’.

65

ํšŒ๊ท€์˜ํ‰๊ฐ€์ง€ํ‘œ

66

R2

ํšŒ๊ท€๋Š”์—ฐ์†๋œ๊ฐ’์„์˜ˆ์ธกํ•˜๋ฏ€๋กœ R2๋งŒ์œผ๋กœ์ถฉ๋ถ„ํ•ฉ๋‹ˆ๋‹ค.

๊ฐ€๋”ํ‰๊ท ์ œ๊ณฑ์—๋Ÿฌ๋‚˜ํ‰๊ท ์ ˆ๋Œ“๊ฐ’์—๋Ÿฌ๋ฅผ์‚ฌ์šฉํ•˜๊ธฐ๋„ํ•ฉ๋‹ˆ๋‹ค.

67

๋ชจ๋ธ์„ ํƒ๊ณผํ‰๊ฐ€์ง€ํ‘œ

68

cross_val_scorescoring ๋งค๊ฐœ๋ณ€์ˆ˜์—์›ํ•˜๋Š”ํ‰๊ฐ€์ง€ํ‘œ๋ฅผ์ง€์ •ํ• ์ˆ˜์žˆ์Šต๋‹ˆ๋‹ค. ๊ธฐ๋ณธ๊ฐ’์€๋ชจ๋ธ์˜score() ๋ฉ”์†Œ๋“œ์ž…๋‹ˆ๋‹ค.

69

roc_auc_score() ํ•จ์ˆ˜๋ฅผ์˜๋ฏธ

GridSearchCV

70

scoring ์˜ต์…˜

๋ถ„๋ฅ˜: accuracy(๊ธฐ๋ณธ๊ฐ’)roc_auc(ROC ๊ณก์„ ์•„๋ž˜๋ฉด์ )average_precision(์ •ํ™•๋„-์žฌํ˜„์œจ๊ณก์„ ์•„๋ž˜๋ฉด์ )f1_macro, f1_micro, f1_weighted

ํšŒ๊ท€: r2(R2)mean_square_error(ํ‰๊ท ์ œ๊ณฑ์˜ค์ฐจ)mean_absolute_error(ํ‰๊ท ์ ˆ๋Œ“๊ฐ’์˜ค์ฐจ)

71

์š”์•ฝ๋ฐ์ •๋ฆฌ

72

์ค‘์š”ํ•œ์ฃผ์˜์‚ฌํ•ญ

๊ต์ฐจ๊ฒ€์ฆ์„ํ•ด์•ผํ•ฉ๋‹ˆ๋‹ค.

ํ›ˆ๋ จ๋ฐ์ดํ„ฐ: ๋ชจ๋ธํ•™์Šต

๊ฒ€์ฆ๋ฐ์ดํ„ฐ: ๋ชจ๋ธ๊ณผ๋งค๊ฐœ๋ณ€์ˆ˜์„ ํƒ

ํ…Œ์ŠคํŠธ๋ฐ์ดํ„ฐ: ๋ชจ๋ธํ‰๊ฐ€

๋ชจ๋ธ์„ ํƒ๊ณผํ‰๊ฐ€์—์ ์ ˆํ•œ์ง€ํ‘œ๋ฅผ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

๋†’์€์ •ํ™•๋„๋ฅผ๊ฐ€์ง„๋ชจ๋ธร ๋น„์ฆˆ๋‹ˆ์Šค๋ชฉํ‘œ์—๋งž๋Š”๋ชจ๋ธ

ํ˜„์‹ค์—์„œ๋Š”๋ถˆ๊ท ํ˜•ํ•œ๋ฐ์ดํ„ฐ์…‹์ด์•„์ฃผ๋งŽ์Œ

๊ฑฐ์ง“์–‘์„ฑ(FP)๊ณผ๊ฑฐ์ง“์Œ์„ฑ(FN)์ด๋งŽ์€์˜ํ–ฅ์„๋ฏธ์นจ

73