Python/Small Project

[Python ML]KOSIS 통계자료를 활용하여 5가지 모델 성능 비교해보기

sohyunkimmm 2023. 1. 24. 16:11
728x90

* KOSIS 국가통계포털

(사이트 소개글)

국가통계포털(KOSIS, Korean Statistical Information Service)은 국내·국제·북한의 주요 통계를 한 곳에 모아 이용자가 원하는 통계를 한 번에 찾을 수 있도록 통계청이 제공하는 One-Stop 통계 서비스입니다. 현재 300여 개 기관이 작성하는 경제·사회·환경에 관한 1,000여 종의 국가승인통계를 수록하고 있으며, 국제금융·경제에 관한 IMF, Worldbank, OECD 등의 최신 통계도 제공하고 있습니다. 쉽고 편리한 검색기능, 일반인들도 쉽게 이해할 수 있는 다양한 콘텐츠 및 통계설명자료 서비스를 통해 이용자가 원하는 통계자료를 쉽고 빠르고 정확하게 찾아보실 수 있습니다. 

 

사이트: https://kosis.kr/index/index.do

 

KOSIS 국가통계포털

내가 본 통계표 최근 본 통계표 25개가 저장됩니다. 닫기

kosis.kr

 

 

 

1. 필요 패키지, 함수 불러오기

분명 여기서 한글을 불러왔는데.. 제대로 설치가 안됐나.. 아래에서 한글이 깨진다 ㅠㅠ

 

 

 

2. 데이터 불러오기

- 나는 KOSIS에서 2019, 2020, 2021년도의 행정구역별 자료를 엑셀에서 합쳐서 구글 드라이브 파일로 불러왔다. 

- 행정구역별_ 신혼부부 수, 맞벌이 부부 수, 평균 출생아 수, 1인당 개인소득, 1인당 지역총소득, 1인간_민간소비지출액, 총 가구, 주택소유 가구, 무주택 가구

- 행정구역이 한글로 되어있어 '행정구역별 ID'라는 열을 추가해 행정구역 별로 임의의 수를 지정했다. 

- '연도' 열을 추가해 2019, 2020, 2021년으로 지정했다. 

전체적인 데이터 분포 살펴보기

 

데이터 타입, 결측값 확인

 

결측값 확인

 

 

 

3. 이상치 찾고 제거하기

- Y = '1인당_민간소비지출액'

박스플롯의 윗쪽에서만 이상치가 발견 되었다

 

히스토그램으로 이상치 한번 더 확인

 

이상치를 제거한 범위(박스플롯 수염 안)의 데이터만 뽑아서 히스토그램으로 확인

 

이상치를 제거한 데이터를 다시 df1 변수에 넣었다

 

df1 데이터의 변수들 확인하기(columns)

 

 

 

4. 변수 선택 (모형기반)

- Y = '1인당_민간소비지출액' ➡️ 연속형 변수(numeric value)

- X = '행정구역별'(행정구역별_ID와 중복되는 요소), '1인당_민간소비지출액'(y값) drop시킨 모든 변수

- 모형기반 변수선택: SelectFromModel

- 모형(모델): RandomForestRegressor 사용

선택된 변수들: '행정구역별_ID', '신혼부부_수', '평균_출생아_수', '1인당_개인소득', '1인당_지역총소득'

 

 

 

5. 모델 생성

- 순서: 데이터 분할 ➡️ 데이터 스케일링 ➡️ 모델 생성(KNeighborsRegressor) ➡️ 모델 학습 ➡️ 결과값 확인

 

1) 선형 회귀(LinearRegression)

y에 로그 씌우기, 데이터 분할, 연속형 데이터 스케일링(StandardScaler)

 

Y는 정규분포를 띄고 있음을 확인

 

LinearRegression_ accuracy = 0.529, RMSE = 0.054

 

 

2) K-NN (KNeighborsRegressor)

KNeighborsRegressor_accuracy = 0.422, RMSE = 0.056

 

 

3) 의사결정나무 (DecisionTreeRegressor)

DecisionTreeRegressor_accuracy = 0.977, RMSE = 0.046

 

'feature importance'로 가중치가 큰 X값 찾아보기_ '1인당 민간소비지출액(Y)'에 가장 영향을 미치는 요소는 '1인당_개인소득'임을 알 수 있다

 

DecisionTree 시각화 해보기

 

 

4) SVR (SupportVectorRegressor)

SupportVectorRegressor_다른 모형들과 조금 다른 결과값을 가진다

 

 

5) 나이브 베이즈 (BayesianRidge)

BayesianRidge_accuracy = 0.507, RMSE = 0.054

 

 

 

6. 모형 성능 비교

- LinearRegression, K-NN, DecisionTree, Naive Bayes 네가지 모델 비교

- SVR모델은 성능 비교에서 제외 (결과값이 이상하게 나옴)

데이터 준비(분할, 스케일링)

 

모델 생성, X_train, Y_train으로 모델 학습시키기

 

각 모델의 예측값(Y_predict)도출

 

각 모델의 accuracy: DT > LR > NB > KNN

 

각 모델의 RMSE: NB > KNN > LR > DT

 

 

 

7. 모델 적용하여 실제값, 예측값 비교

- RMSE는 네 모델 모두 큰 차이가 없지만, accuracy는 Decision Tree가 압도적으로 높게 나왔다. 

- DecisionTree모형 선택!

실제값(Y_test)과 DecisionTree모델의 예측값(dt_Y_pred) 비교

 

 

728x90
반응형