[TIL]_2025.07.02 최종 프로젝트 - 12

JIYUU·2025년 7월 2일

데이터 전처리

머신러닝 성능을 높이고자 데이터 전처리 단계로 돌아가서, 데이터의 유형에 따라서 7, 8, 9를 처리했다.

'만나이',
'성별',
'세대유형',
'치매 환자 가족 여부',
'건강수준',
'흡연 경험',
'일반담배 흡연 경험',
'일반담배 현재 흡연 여부',
'일반담배 하루 평균 흡연량',
'일반담배 간헐적 흡연자의 흡연일수',
'일반담배 간헐적 흡연자의 하루 평균 흡연량',
'일반담배 과거흡연자의 하루 평균 흡연량',
'일반담배 과거흡연자의 금연기간',
'궐련형 전자담배 현재 흡연 여부',
'궐련형 전자담배 하루 평균 흡연량',
'궐련형 전자담배 간헐적 흡연자의 흡연일수',
'궐련형 전자담배 간헐적 흡연자의 하루 평균 흡연량',
'액상형 전자담배 흡연자의 흡연일수',
'타 종류 담배 사용 경험',
'가정 간접흡연 여부',
'직장 간접흡연 경험 여부',
'음주 경험',
'연간 음주 빈도',
'아침식수 일수',
'키',
'몸무게',
'BMI',
'주중 평균 수면시간',
'주말 평균 수면시간',
'스트레스 수준',
'우울감 경험',
'직무 흥미 저하',
'우울감',
'수면장애',
'무기력',
'식이장애',
'자기비하',
'집중력저하',
'활동둔화',
'자살충동',
'자살충동 여부',
'불면증',
'수면유지장애',
'야뇨증',
'수면호흡장애',
'수면 중 기침 및 코골이',
'수면 중 한기',
'수면 중 열감',
'수면 중 통증',
'수면 질',
'수면 약 복용',
'생활 중 졸음 정도',
'인지장애 경험 여부',
'치매선별검사 여부',
'고혈압 진단',
'혈압약 복용일수',
'당뇨병 진단',
'당화혈색소 검사',
'의료미충족',
'행복지수',
'운동 능력',
'자기 관리',
'일상 활동',
'통증 불편',
'불안 우울',
'보건기관 이용',
'경제 활동',
'업종',
'종사 지위',
'혼인',
'연령대'

  1. 범주형 변수 - 명목형, 이진형 변수 (성별, 예/아니오 응답)
    8은 제거, 7, 9 최빈값으로 대체
binary_col = []

for col in df_old.columns:
    unique_vals = set(df_old[col].dropna().unique())
    
    if {1, 2}.issubset(unique_vals) and unique_vals.isdisjoint({3, 4, 5, 6}):
        binary_col.append(col)
  1. 수치형 변수 - 그대로 사용
continuous_col = ['만나이', '키', '몸무게', 'BMI']
  1. 범주형 변수 - 명목형 변수 (제거)
nominal_col = ['세대유형', '업종', '종사 지위', '혼인']
  1. 범주형 변수 - 순서형 (전체 변수에서 모든 변수 제외한 나머지), 8을 1로, 나머지는 순서대로 맵핑
ordinal_col = [
    col for col in df_old.columns
    if col not in binary_col
    and col not in continuous_col
    and col not in nominal_col
]

'건강수준', 그대로 사용 가능한 순서형 범주
'일반담배 흡연 경험', 8번을 0으로 7/9 최빈값
'일반담배 현재 흡연 여부', 8번을 4로 7/9는 최빈값
'일반담배 하루 평균 흡연량', 888을 0으로, 777/999는 최빈값
'일반담배 간헐적 흡연자의 흡연일수', 88을 0으로, 77/99는 최빈값
'일반담배 간헐적 흡연자의 하루 평균 흡연량', 888을 0으로, 777/999는 최빈값
'일반담배 과거흡연자의 하루 평균 흡연량', 888을 0으로, 777/999는 최빈값
'일반담배 과거흡연자의 금연기간', 8은 6으로, 7과 9는 최빈값
'궐련형 전자담배 현재 흡연 여부', 8번을 4로 7/9는 최빈값
'궐련형 전자담배 하루 평균 흡연량',888을 0으로, 777/999는 최빈값
'궐련형 전자담배 간헐적 흡연자의 흡연일수', 88을 0으로, 77/99는 최빈값
'궐련형 전자담배 간헐적 흡연자의 하루 평균 흡연량',888을 0으로, 777/999는 최빈값
'액상형 전자담배 흡연자의 흡연일수', 88을 0으로, 77/99는 최빈값
'타 종류 담배 사용 경험', 8을 3으로, 7과 9는 최빈값
'직장 간접흡연 경험 여부', 컬럼 제거
'연간 음주 빈도', 8을 1로, 7과 9는 최빈값 대체
'아침식수 일수', 그대로 사용
'주중 평균 수면시간', 그대로 사용
'주말 평균 수면시간', 그대로 사용
'스트레스 수준', 7은 최빈값 대체, 9를 5로 만들기
'직무 흥미 저하', 7,9는 최빈값 대체
'우울감', 7,9는 최빈값 대체
'수면장애',7,9는 최빈값 대체
'무기력',7,9는 최빈값 대체
'식이장애',7,9는 최빈값 대체
'자기비하', 7,9는 최빈값 대체
'집중력저하', 7,9는 최빈값 대체
'활동둔화',7,9는 최빈값 대체
'자살충동',7,9는 최빈값 대체
'불면증', 7,9는 최빈값 대체
'수면유지장애', 7,9는 최빈값 대체
'야뇨증', 7,9는 최빈값 대체
'수면호흡장애', 7,9는 최빈값 대체
'수면 중 기침 및 코골이', 7,9는 최빈값 대체
'수면 중 한기', 7,9는 최빈값 대체
'수면 중 열감', 7,9는 최빈값 대체
'수면 중 통증', 7,9는 최빈값 대체
'수면 질',7,9는 최빈값 대체
'수면 약 복용',7,9는 최빈값 대체
'생활 중 졸음 정도',7,9는 최빈값 대체
'혈압약 복용일수', 88은 0으로, 77/99는 최빈값 대체
'당화혈색소 검사', 컬럼 제거
'의료미충족', 3번을 2번으로 바꾸고 이진형으로 취급하기
'행복지수', 77과 99는 최빈값으로 대체하기
'운동 능력', 9를 최빈값 대체
'자기 관리', 그대로 사용
'일상 활동',9를 최빈값 대체
'통증 불편', 그대로 사용
'불안 우울', 9를 최빈값 대체
'연령대'
40대 : 1, 50대: 2, 60대: 3, 70대: 4, 80대: 5 등으로 순서형 범주 처리

1. 그대로 사용 가능한 순서형 변수 (값의 크기 순서 보존)
건강수준
아침식수 일수
주중 평균 수면시간
주말 평균 수면시간
자기 관리
통증 불편
연령대 (40대:1, 50대:2 등등) Ordinal Encoding 진행

2. 7, 9를 최빈값으로 대체하는 변수들

직무 흥미 저하
우울감
수면장애
무기력
식이장애
자기비하
집중력저하
활동둔화
자살충동
불면증
수면유지장애
야뇨증
수면호흡장애
수면 중 기침 및 코골이
수면 중 한기
수면 중 열감
수면 중 통증
수면 질
수면 약 복용
생활 중 졸음 정도
운동 능력
일상 활동
불안 우울

3. 특정 값을 다른 값으로 변경, 나머지는 최빈값 처리
스트레스 수준 - 9를 5로, 7은 최빈값
행복지수 - 77, 99를 최빈값
의료미충족 - 3을 2로 바꾼 후 이진형으로 사용

4. 흡연/음주/고혈압 - 8을 특정 값으로 대체 + 나머지 최빈값 처리

일반담배 하루 평균 흡연량 → 888: 0 / 777,999: 최빈값
일반담배 간헐적 흡연자의 하루 평균 흡연량 → 888: 0 / 777,999: 최빈값
궐련형 전자담배 하루 평균 흡연량 → 888: 0 / 777,999: 최빈값
궐련형 전자담배 간헐적 흡연자의 하루 평균 흡연량 → 888: 0 / 777,999: 최빈값

일반담배 간헐적 흡연자의 흡연일수 - 88: 0, 77/99: 최빈값
궐련형 전자담배 간헐적 흡연자의 흡연일수 - 88: 0, 77/99: 최빈값
액상형 전자담배 흡연자의 흡연일수 - 88: 0, 77/99: 최빈값

일반담배 흡연 경험 - 8: 0 / 7,9: 최빈값

혈압약 복용일수 → 88: 0 / 77,99: 최빈값

일반담배 현재 흡연 여부 - 8: 4 / 7,9: 최빈값
궐련형 전자담배 현재 흡연 여부 - 8: 4 / 7,9: 최빈값
타 종류 담배 사용 경험 - 8: 3 / 7,9: 최빈값
일반담배 과거흡연자의 금연기간 - 8: 6 / 7,9: 최빈값

연간 음주 빈도 - 8: 1 / 7,9: 최빈값

7. 컬럼 제거 대상
직장 간접흡연 경험 여부 (이진 분류임에도 3. 직장을 다니지 않음 (35.5%)이라는 선택지로 인해 이진형 불가능, EDA 시에도 큰 인사이트가 없었기 때문에 제거)
당화혈색소 검사 (단순히 검사 실시 여부와 인지장애가 큰 관련이 없기 때문에 제거 )

0개의 댓글