TIL(Today I Learned)
1️⃣통계 & 머신러닝 복습
머신러닝 전체 과정 요약
머신러닝은 단순히 모델을 만드는 것이 아니라
👉 데이터 이해 → 가공 → 학습 → 평가 → 개선의 과정이다.
문제 정의
- 무엇을 예측할지 결정 (분류 / 회귀)
데이터 수집 & 탐색 (EDA)
- 결측치, 이상치 확인
- 분포, 상관관계 분석
통계 분석 (가설 검정)
- t-test: 평균 차이 확인 (연속형 데이터)
- 카이제곱: 범주형 변수 관계 확인
👉 변수들이 의미 있는지 먼저 검증
데이터 전처리
- 결측치 처리
- 인코딩 (문자 → 숫자)
- 스케일링
데이터 분리
- Train / Test로 나눔
- 일반화 성능 확인 목적
모델 학습
- RandomForest, XGBoost 등 적용
예측 & 평가
- 회귀: MAE, RMSE, R²
- 분류: Accuracy, F1-score
개선
- Feature Engineering
- 하이퍼파라미터 튜닝
- 모델 변경
한 줄 요약
👉 머신러닝은 데이터를 이해하고, 검증하고, 학습시키고, 성능을 개선하는 반복 과정이다.
데이터 구조 별 통계 검정
| 평균 비교 (2개) | t-test |
| 평균 비교 (3개 이상) | ANOVA |
| 범주형 관계 | 카이제곱 |
| 연속형 관계 | Pearson |
| 정규성 안 맞음 | 비모수 |
검정 별 그룹화 여부 및 방식
| 검정 | 그룹화 필요 여부 | 방식 |
| t-test | ✅ | 그룹 나눠서 값 비교 |
| ANOVA | ✅ | 그룹 여러 개 비교 |
| 카이제곱 | ❗ | 교차표 생성 |
| 상관분석 | ❌ | 변수 2개 |
| 정규성 검정 | ⭕ | 보통 그룹별 확인 |
회귀 모델 평가 지표 정리
| 지표 | 의미 | 특징 | 사용 방법 |
| MAE (Mean Absolute Error) | 오차 절댓값 평균 | 이상치 영향 적음 | 안정적인 평균 오차 보고 싶을 때 |
| MSE (Mean Squared Error) | 오차 제곱 평균 | 큰 오차에 매우 민감 | 큰 실수를 더 강하게 패널티 줄 때 |
| RMSE (Root MSE) | MSE에 루트 | 실제 단위와 동일 | 직관적인 해석 필요할 때 |
| R² (결정계수) | 설명력 (얼마나 잘 맞추는지) | 0~1 (높을수록 좋음) | 모델 성능 전반 평가 |
2️⃣머신러닝 실습
Predicting Road Accident Risk
Playground Series - Season 5, Episode 10
www.kaggle.com
- 실습 코드: practice.ipynb - Colab
- 개선 방안
더보기
데이터 이해 (EDA)
- 결측치, 이상치, 분포 확인
전처리
- 결측치 처리
- 범주형 인코딩
- 스케일링
피처 엔지니어링 ⭐ (가장 중요)
- 날짜 분리
- 비율/합 변수 생성
- 로그 변환
좋은 모델 사용
- RandomForest
- XGBoost / LightGBM ⭐
검증
- Cross Validation 사용
튜닝 & 앙상블
- 하이퍼파라미터 튜닝
- 모델 여러 개 합치기
3️⃣Python 알고리즘 주요 문제
문제1
- 문제 설명: 코딩테스트 연습 - 개인정보 수집 유효기간 | 프로그래머스 스쿨
- 제한 사항
더보기
- today는 "YYYY.MM.DD" 형태로 오늘 날짜를 나타냅니다.
- 1 ≤ terms의 길이 ≤ 20
- terms의 원소는 "약관 종류 유효기간" 형태의 약관 종류와 유효기간을 공백 하나로 구분한 문자열입니다.
- 약관 종류는 A~Z중 알파벳 대문자 하나이며, terms 배열에서 약관 종류는 중복되지 않습니다.
- 유효기간은 개인정보를 보관할 수 있는 달 수를 나타내는 정수이며, 1 이상 100 이하입니다.
- 1 ≤ privacies의 길이 ≤ 100
- privacies[i]는 i+1번 개인정보의 수집 일자와 약관 종류를 나타냅니다.
- privacies의 원소는 "날짜 약관 종류" 형태의 날짜와 약관 종류를 공백 하나로 구분한 문자열입니다.
- 날짜는 "YYYY.MM.DD" 형태의 개인정보가 수집된 날짜를 나타내며, today 이전의 날짜만 주어집니다.
- privacies의 약관 종류는 항상 terms에 나타난 약관 종류만 주어집니다.
- today와 privacies에 등장하는 날짜의 YYYY는 연도, MM은 월, DD는 일을 나타내며 점(.) 하나로 구분되어 있습니다.
- 2000 ≤ YYYY ≤ 2022
- 1 ≤ MM ≤ 12
- MM이 한 자릿수인 경우 앞에 0이 붙습니다.
- 1 ≤ DD ≤ 28
- DD가 한 자릿수인 경우 앞에 0이 붙습니다.
- 파기해야 할 개인정보가 하나 이상 존재하는 입력만 주어집니다.
- 입출력 예

- 문제 접근
- 현재 날짜를 일 기준으로 치환한다.
- terms에 들어가는 알파벳이 다르므로 딕셔너리를 for문을 통해 생성한다.
- privacies를 enumerate를 통해 인덱스와 값을 동시에 추출하여 순회한다.
- 공백을 기준으로 시작 날짜와 날짜 약관 종류를 나누고 날짜는 일 기준으로 치환한다.
- 시작 날짜에 약관 종류를 기준으로 날짜를 더해 만료일을 구한다.
- 현재의 날짜와 만료일의 날짜를 비교하여 answer에 인덱스에 +1한 값을 대입한다.
- 코드
더보기
def solution(today, terms, privacies):
answer = []
y, m, d = map(int,today.split('.'))
today_day = y*12*28 + m*28 + d
terms_dict = {}
for term in terms:
kind, month = term.split()
terms_dict[kind] = int(month)
for i, p in enumerate(privacies):
date, kind = p.split()
y, m, d = map(int,date.split('.'))
start_day = y*12*28 + m*28 + d
expire_day = start_day + terms_dict[kind] * 28
if expire_day <= today_day:
answer.append(i+1)
return answer
💡 느낀점
캐글에서 다양한 유저들이 사용한 데이터의 머신러닝 실습 과정을 진행하며 전체적인 흐름을 이해할 수 있었다. 캐글에서 제공된 데이터의 경우 잘 정제되어 있어 결측치가 없는 경우가 많아서 아쉬웠다. 추후에는 결측치가 존재하는 실제 데이터를 활용하여 디테일한 전처리 과정과 함께 머신러닝 또한 개선까지 진행하는 실습을 할 예정이다.
'데이터 분석 심화' 카테고리의 다른 글
| Chapter.4 데이터 분석 심화(10) (0) | 2026.04.24 |
|---|---|
| Chapter.4 데이터 분석 심화(9) (1) | 2026.04.23 |
| Chapter.4 데이터 분석 심화(8) (0) | 2026.04.22 |
| Chapter.4 데이터 분석 심화(7) (0) | 2026.04.21 |
| Chapter.4 데이터 분석 심화(6) (1) | 2026.04.20 |