λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°

Machine Learning

[Machine Learning] Data Leakage

λ°˜μ‘ν˜•

βœ‹ Data Leakage λž€?

: Train Data μ™Έμ˜ 정보가 λͺ¨λΈμ„ λ§Œλ“œλŠ”λ° μ‚¬μš©λ  λ•Œ λ°œμƒ

  (μš°λ¦¬κ°€ λͺ¨λ₯Έλ‹€κ³  κ°€μ •λœ "정보가 λˆ„μ„€"된 경우λ₯Ό 의미)

 

곡λͺ¨μ „에 μ°Έκ°€ν•  λ•Œ λ°›λŠ” 데이터 : train data  (이미 μ•Œκ³  μžˆλŠ” 정보)

곡λͺ¨μ „에 μ œμΆœν•˜λŠ”λ° μ‚¬μš©ν•˜λŠ” 데이터 : test data  (λͺ¨λ₯΄λŠ” 정보)

 

πŸ‘‰ λͺ¨λ₯΄λŠ” 정보인 test data의 ν†΅κ³„μΉ˜κ°€ test data μ‚¬μ΄μ—μ„œ 반영될 수 μ—†μŒ

      train data λ₯Ό κ°€μ§€κ³  test data λ₯Ό μ˜ˆμΈ‘ν•˜λŠ” 것이 λͺ©ν‘œ

 

πŸ‘‰ Data Leakage : Test Data의 κ°œμˆ˜λ‚˜ 뢄포 등이 λ³€ν™”ν•  λ•Œλ§ˆλ‹€ Train / Test λ₯Ό μ§„ν–‰ν•  λ•Œ 영ν–₯을 λΌμΉ˜λŠ” μš”μ†Œ

 

βœ‹ Data Leakage 의 문제점

: μžμ‹ μ˜ 에츑 λͺ¨λΈμ„ κ°œλ°œν•  λ•Œ 문제점 λ°œμƒ

πŸ‘‰ μ‹€μ œλ‘œ μ“Έλͺ¨μ—†κ³  생산성 μ—†λŠ” μ§€λ‚˜μΉ˜κ²Œ 낙관적인 λͺ¨λΈμ„ λ§Œλ“€μ–΄ λ‚Ό κ°€λŠ₯μ„± λ†’μŒ (Overfitting λ°œμƒ)

 

βœ‹ Data Leakage κ°€ λ˜λŠ” μš”μ†Œλ“€

1. Test Data λ…ΈμΆœ

: μ•Œ 수 μ—†λŠ” 정보가 μ˜ˆμΈ‘μ— λ°˜μ˜λ˜μ—ˆμ„ λ•Œ λ‚˜νƒ€λ‚˜λŠ” 문제 

 

ex. μ‹œκ°„, μˆœμ„œ 의 κ°œλ…μ΄ λ„μž…λ˜λŠ” 경우

- 1μ‹œκ°„ λ‹¨μœ„λ‘œ 기둝된 train, test data에 "일 평균 μ˜¨λ„"λΌλŠ” Featureλ₯Ό λ§Œλ“¦

- But, Test dataλŠ” "μ‹œκ°„"의 κ°œλ…μ„ κ°€μ§€κ³  "μ—°λŒ€μ„±"을 κ°€μ§€κ³  λ“±μž₯ν•˜κΈ° λ•Œλ¬Έμ— 기초 μ „μ œλΆ€ν„° 잘λͺ»λ¨

  1μ‹œκ°„ λ’€μ˜ μ˜¨λ„ = μ•Œ 수 μ—†λŠ” data    πŸ‘‰   μΌ 평균 μ˜¨λ„?   μ•Œ 수 μ—†μŒ

 

2. Train-Test ν†΅ν•©ν•΄μ„œ 문제 λ°œμƒ

: 미래의 데이터 (Test Data) λ₯Ό μ•Œ 수 μ—†λŠ”λ° ν˜„μž¬ μ‹œμ μ—μ„œ ν•¨κ»˜ ν†΅κ³„λŸ‰μ„ λ°˜μ˜ν•  λ•Œ

 

3. Target κ°’ leakage

: κ²°κ³Ό 값이 ν•˜λ‚˜μ˜ νŒŒμƒ λ³€μˆ˜λ‘œ ν•¨κ»˜ ν•™μŠ΅ λ˜λŠ” 경우

 

βœ‹ Data Leakage 의 μ˜ˆμ‹œ

1. Kaggle - Bike sharing demand data 

- μ›Œμ‹±ν„΄ DC의 Capital Bikeshare ν”„λ‘œκ·Έλž¨μ—μ„œ μ‚¬μš©ν•  μžμ „κ±° λŒ€μ—¬ μˆ˜μš”λŸ‰μ„ μ–Όλ§ˆλ‚˜ 잘 μ˜ˆμΈ‘ν•˜λŠ”μ§€ κ²¨λ£¨λŠ” λŒ€νšŒ

- data sets : λ‚ μ§œ/μ‹œκ°„λ³„ μš”μΌ, νœ΄μΌμ—¬λΆ€, μ˜¨λ„, μŠ΅λ„ λ“±μ˜ 날씨정보, νšŒμ›/λΉ„νšŒμ› 여뢀에 λ”°λ₯Έ λŒ€μ—¬λŸ‰ 정보

[ Data Fields ]
datetime - hourly date + timestamp  
season -  1 = spring, 2 = summer, 3 = fall, 4 = winter 
holiday - whether the day is considered a holiday
workingday - whether the day is neither a weekend nor holiday
weather - 1: Clear, Few clouds, Partly cloudy, Partly cloudy
2: Mist + Cloudy, Mist + Broken clouds, Mist + Few clouds, Mist
3: Light Snow, Light Rain + Thunderstorm + Scattered clouds, Light Rain + Scattered clouds
4: Heavy Rain + Ice Pallets + Thunderstorm + Mist, Snow + Fog 
temp - temperature in Celsiusatemp - "feels like" temperature in Celsius
humidity - relative humiditywindspeed - wind speed
casual - number of non-registered user rentals initiated
registered - number of registered user rentals initiated
count - number of total rentals

- λͺ©μ  : μ‹œκ°„별 μžμ „κ±°μ˜ 총 λŒ€μ—¬λŸ‰(count) κ΅¬ν•˜κΈ°

 

πŸ‘€ casual, registered 두 λ³€μˆ˜ μ„€λͺ…

casual  -   λΉ„νšŒμ›μ˜ μžμ „κ±° λŒ€μ—¬λŸ‰

registered  -  νšŒμ›μ˜ μžμ „κ±° λŒ€μ—¬λŸ‰

πŸ‘‰ casual + registered = count

 

πŸ“Œ 이λ₯Ό 톡해 λΉ„νšŒμ›/νšŒμ›μ˜ μžμ „κ±° λŒ€μ—¬λŸ‰(casual/registered)을 λ…λ¦½λ³€μˆ˜λ‘œ μ‚¬μš©ν•˜λ©΄

      Train Data μ—μ„œ 쒋은 κ²°κ³Όκ°€ λ‚˜μ˜¬ 수 밖에 μ—†μŒ

      But, 에츑 λͺ¨λΈμ„ ν™œμš©ν•˜κ³ μž ν•˜λŠ” μ‹œμ μ—λŠ” 값을 넣을 수 μ—†μ–΄μ„œ λ¬Έμ œκ°€ λ°œμƒ

 

2. Confirmed COVID19 Prediction data

- λ‹€μŒκ³Ό 같은 κ°œμΈμ •λ³΄κ°€ μ‘΄μž¬ν•  λ•Œ, μ½”λ‘œλ‚˜ 확진을 받은 적이 μžˆλŠ”μ§€ μ—¬λΆ€λ₯Ό μ˜ˆμΈ‘ν•œλ‹€κ³  κ°€μ •

이름, 성별, λ‚˜μ΄, κ±°μ£Όμ§€, 직업, λ°±μ‹ μ ‘μ’…μ—¬λΆ€, μ½”λ‘œλ‚˜ κ²€μ§„ν‚€νŠΈ μ‚¬μš©μ—¬λΆ€, μžκ°€κ²©λ¦¬κΈ°κ°„, μ½”λ‘œλ‚˜ν™•μ§„μž μ§€μ›κΈˆ μˆ˜λ Ήμ—¬λΆ€

πŸ‘‰ 'μ½”λ‘œλ‚˜ν™•μ§„μž μ§€μ›κΈˆ'은 확진을 받은 μ‚¬λžŒλ§Œμ΄ 받을 수 μžˆλŠ” κ°’

       λ”°λΌμ„œ, 이 값을 feature 둜 μ‚¬μš©ν•˜λ©΄ λͺ¨λΈ μ˜ˆμΈ‘λ„λŠ” λ‹Ήμ—°νžˆ 올라갈 수 밖에 μ—†μŒ

πŸ“’ ν™•μ§„μž 쀑에 μ§€μ›κΈˆμ„ λ°›μ§€ μ•Šμ€ μ‚¬λžŒμ΄ μ‘΄μž¬ν•  수 μžˆκ² μ§€λ§Œ, ν”Όμ²˜κ°„μ˜ 인과관계λ₯Ό κ³ λ―Όν•΄λ³΄μ•˜μ„ λ•Œ

      이 값을 μ‚¬μš©ν•˜λŠ” 것은 λ°”λžŒμ§ν•˜μ§€ μ•ŠμŒ

https://www.kaggle.com/alexisbcook/data-leakage

 

βœ‹ Preventation of Data Leakage

- ν•™μŠ΅ μ§„ν–‰ μ‹œ ν•™μŠ΅μš© 데이터와 ν…ŒμŠ€νŠΈμš© 데이터, κ²€μ¦μš© λ°μ΄ν„°λ‘œ 뢄할을 μ§„ν–‰

- 이후에 각각에 λŒ€ν•΄μ„œ μ „μ²˜λ¦¬λ₯Ό μˆ˜ν–‰ν•˜λŠ” 것

 

πŸ“Œ 데이터 뢄할을 μ§„ν–‰ν•˜λŠ” 이유

    : 데이터λ₯Ό λ©μ–΄λ¦¬λ‘œ κ΅¬λΆ„μ§€μ–΄μ„œ λ©μ–΄λ¦¬λ§ˆλ‹€ λͺ©μ μ„ λ‹€λ₯΄κ²Œ ν™œμš©ν•˜λ €κ³ 

     λ°μ΄ν„° 뢄할을 ν•œ 

 

πŸ‘€ ν•™μŠ΅ λͺ¨λΈμ„ μ‹€μ œλ‘œ ν™œμš©ν•  μ‹œμ μ— μ–΄λ–€ ν˜•νƒœμ˜ 데이터가 λ°œμƒν• μ§€ λͺ¨λ₯΄κΈ° λ•Œλ¬Έμ—,

      일뢀λ₯Ό λ—΄μ–΄μ„œ '이건 μ—†λŠ”κ±°λ‹€' μƒκ°ν•˜κ³  ν•™μŠ΅μ„ μ‹œν‚¨λ‹€

X = scaler.fit_transform(X)
X_train, X_valid, y_train, y_valid = train_test_split(X, y, test_size=0.3, random_state=42)

πŸ‘‰ 문제점 : κ²€μ¦μš© λ°μ΄ν„°μ˜ 정보가 ν•™μŠ΅μš© 데이터에 μŠ€λ©°λ“€ 수 있음 (leakage)

 

πŸ“š train data = 0 ~ 10

     validataion data = 7 ~ 13

μœ„μ˜ μ½”λ“œμ—μ„œ μ‚¬μš©ν•œ scalerκ°€ MinMaxScaler라면 데이터 뢄할을 ν•˜κ³  λ³€ν™˜μ„ ν•˜λŠλƒ,

λΆ„ν•  이후에 λ³€ν™˜μ„ ν•˜λŠλƒμ— 따라 κ²°κ³Όκ°€ 달라진닀

πŸ‘‰ 데이터 뢄할을 ν•œ 이후에 각각에 λŒ€ν•΄μ„œ μ „μ²˜λ¦¬λ₯Ό μˆ˜ν–‰ν•΄μ•Ό 데이터 λˆ„μˆ˜λ₯Ό μ˜ˆλ°©ν•  수 있음

ꡐ차 검증 λ“±μ˜ μž‘μ—…μ„ μˆ˜ν–‰ν•˜λ©΄μ„œ λ‹€μ–‘ν•œ κ²½μš°μ— λŒ€ν•΄ μΆ©λΆ„νžˆ ν•™μŠ΅ν•˜λŠ” 기법을 ν™œμš©

 

λ°˜μ‘ν˜•

'Machine Learning' μΉ΄ν…Œκ³ λ¦¬μ˜ λ‹€λ₯Έ κΈ€

[Machine Learning] Poisson Regression  (0) 2023.04.26
[Machine Learning] XGBoost (Extreme Gradient Boosting)  (0) 2023.04.26
[Machine learning] scikit-learn pipeline  (0) 2023.04.21
[Machine Learning] Hyperparameter Tuning  (0) 2023.04.21
[Machine Learning] Feature Engineering  (0) 2023.04.21