데이터 분석 심화

Chapter.4 데이터 분석 심화(11)

devjjun 2026. 4. 28. 17:43

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에 루트 실제 단위와 동일 직관적인 해석 필요할 때
(결정계수) 설명력 (얼마나 잘 맞추는지) 0~1 (높을수록 좋음) 모델 성능 전반 평가

 


2️⃣머신러닝 실습 

 

Predicting Road Accident Risk

Playground Series - Season 5, Episode 10

www.kaggle.com

더보기

데이터 이해 (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이 붙습니다.
  • 파기해야 할 개인정보가 하나 이상 존재하는 입력만 주어집니다.
  • 입출력 예

  • 문제 접근
    1. 현재 날짜를 일 기준으로 치환한다.
    2. terms에 들어가는 알파벳이 다르므로 딕셔너리를 for문을 통해 생성한다.
    3. privacies를 enumerate를 통해 인덱스와 값을 동시에 추출하여 순회한다. 
    4. 공백을 기준으로 시작 날짜와 날짜 약관 종류를 나누고 날짜는 일 기준으로 치환한다. 
    5. 시작 날짜에 약관 종류를 기준으로 날짜를 더해 만료일을 구한다.
    6. 현재의 날짜와 만료일의 날짜를 비교하여 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

💡 느낀점

캐글에서 다양한 유저들이 사용한 데이터의 머신러닝 실습 과정을 진행하며 전체적인 흐름을 이해할 수 있었다. 캐글에서 제공된 데이터의 경우 잘 정제되어 있어 결측치가 없는 경우가 많아서 아쉬웠다. 추후에는 결측치가 존재하는 실제 데이터를 활용하여 디테일한 전처리 과정과 함께 머신러닝 또한 개선까지 진행하는 실습을 할 예정이다.