본문 바로가기

카테고리 없음

초보자와 함께하는 머신러닝과 딥러닝 - 2편 : 데이터 분석

 

초보자와 함께하는 머신러닝과 딥러닝 - 1편 : 학습방법

데이터 사이언티스트의 주요 업무라고 볼 수 있는 데이터 분석을 통한 범주 분류, 회귀식 도출로 미래를 예측하는 과정에서 많이 사용되고 있으면 각광받고 있는 것이 Machine Learning과 Deep Learning

thebeworld.tistory.com

머신 러닝과 딥러닝 학습 2편입니다.

이번 시간에는 저번에 말했던 공모전 데이터를 가져와 데이터를 분석해 전처리하는 과정을 진행해보겠습니다.

이때 사용할 것은 구글 colab이라는 플랫폼입니다.

리눅스 명령어가 사용가능한, python 플랫폼이라고 생각하면 쉽습니다.

visual studio code나 anacoda와 같이 다양한 언어가 지원되는 플랫폼이 아닌 빅데이터를 분석하고, 머신러닝과 딥러닝에 최적화되어 이에 필요한 대부분의 라이브러리가 깔려있는 것은 물론이고 무료로 고사양의 컴퓨터를 빌려서 사용하는 것처럼 사용할 수 있다는 장점을 지니고 있습니다.

 

구글에 colab이라고 검색해서 들어가봅시다.

 

STEP 01. Google Colab 들어가기

 

처음 화면은 위와 같습니다.

저의 경우엔 설정에 들어가서 배경화면을 dark로 설정해둔 상태입니다.

[새노트]를 눌러 들어가면 아래와 같은 화면이 나오게 됩니다.

 

초기 화면입니다.

이렇게 새노트를 만들어 코드를 입력하게 되면 제일 먼저 구글로부터 자원을 할당받는 과정을 거치게 되는데요, 간단히 말해 우리가 쓸 고사양 컴퓨터를 배정받는 과정입니다.

수많은 사람들이 사용하고 있기 때문에 오랜 시간(30분) 사용하지 않거나 여러 사용자가 몰리면 연결이 끊기기도 합니다. 작성한 코드가 사라지거나 하는 것은 아니지만 지나치게 많은 리소스를 사용하는 연산을 시도하거나 할 때에는 연산 과정 중간에 끊어질 수도 있습니다.

 

한 번 새로 만든 노트를 통해 기본 코드를 작성해보겠습니다.

 

기본적으로 사용하는 방식은 jupyter notebook과 동일합니다.

실제로 작업한 파일의 확장자 명도 ipynb입니다.

 

STEP 02. 공모전 데이터 가져오기

 

이전에 소개했던 데이콘 사이트에 들어가보시면 여러 공모전이 진행되고 있으며, 이미 끝난 공모전들의 경우에도 공모전 데이터와 베이직 코드, 여러 훌륭하신 분들이 공유해주신 코드 등이 존재하고 있습니다.

저는 현재 진행 중인 심리 성향 예측 AI 경진대회를 눌러 참가신청을 한 뒤, 데이터를 가져오겠습니다.

실제 공모전을 참여할 경우 제출한 코드의 저작권 등이 대회 진행측으로 넘어간다는 문구와 초상권 등에 대해 한국식의 불공평한 규정이 있었지만 취직을 위한 스펙을 노려본다면 신청해서 수상을 노려보는 것도 좋을 듯 싶습니다.

 

데이터 다운로드를 클릭하고 다운로드가 시작되는 것을 확인한 후에는 데이터 안에 들어있는 변수 내용이 어떻게 구성되어 있는지를 확인해보았습니다.

데이터 변수 설명에 의하면 이 프로젝트의 목적은 성별, 종교, 인종, 주로 사용하는 손, 결혼 여부나 교육 수준, 유년기 거주구역과 더불어 개인정보 보호를 위해 시크릿 처리된 여러 변수들을 통해 사람들의 투표 여부를 학습해서 예측해보는 프로젝트임을 알 수 있습니다.

변수의 숫자도 적당하고, 실제 데이터이기 때문에 믿을만하면서도 정형 데이터의 형식으로 되어 있기에 의미있는 분석 결과를 도출해낼 수 있다면 제법 가치가 있는 프로젝트가 될 것 같습니다.

 

다운로드 받은 파일 목록은 위와 같습니다.

제일 아래의 train 데이터가 저희가 분석해서 에측 모델을 만들 데이터이고, 두 번째의 test_x 데이터가 voted 종속 변수가 빠져있는 테스트 데이터입니다.

자체적으로 만든 모델을 예측해서 test_x 데이터를 예측한 뒤 그 결과를 제일 위의 sample_submission에 입력해 제출하면 그에 대한 정확도 등을 평가해 우승자를 가리는 방식으로 보입니다.

참고로 훈련용 데이터로 제시된 데이터의 양은 45,000명 정도이고, 이를 통해 11,000명이 투표를 할 것인지를 예측하면 되겠습니다.

이후 프로젝트 진행은 이전에 올렸던 '[EDU]머신러닝 프로젝트 진행 과정' 게시글의 순서대로 진행해보도록 하겠습니다.

 

[EDU]머신러닝 프로젝트 진행 과정

STEP 00. 프로젝트 정의 1. 프로젝트 주제 선정 or 수집할 데이터 선정 2. 분석 목적 정의 3. 결과 예측 & 가정 STEP 01. 데이터 수집 1. 크롤링 2. API 3. 내부 DB 4. 구입한 DATA STEP 02. 데이터 전처리 1. 데..

thebeworld.tistory.com

 

STEP 03. 데이터 전처리 1 - 데이터 로딩 & 이해

 

JUPYTER NOTEBOOK과는 다른 구글 COLAB만의 파일 업로드 방식입니다. 위에서 말했던 것처럼 COLAB의 경우 고사양의 컴퓨터를 빌려서 사용하는 것과 같기 때문에 저 멀리 있는 할당된 컴퓨터에 저희가 가지고 있는 파일을 업로드하는 과정이 필요합니다.

 

이렇게 불러온 파일을 Pandas로 불러와보겠습니다.

Pandas로 train.csv 파일을 불러오고 해당 파일의 정보를 확인해보았습니다. 데이터 안에 몇 개의 데이터가 들어있고, null값이 있지는 않은지 입력된 형식 정수형(int64)인지 실수형(float64)인지, 아니면 문자형(object)인지 체크해보았습니다.

제일 아래에 몇 개의 변수형이 나와있는지 정리되어 있는데, 나온 결과에 의하면 해당 데이터셋은 20개의 실수형 변수와 54개의 정수형 변수, 4개의 문자형 변수로 구성되어 있습니다.

이러한 데이터 확인 과정을 통해 생각해야할 것은 크게 두 가지입니다.

하나는 데이터가 어떻게 형성되어 있는 파악하는 것이고, 다른 하나는 null값이 있는지 확인하는 것입니다. 이러한 과정을 통해 데이터를 분석이 가능한 형태(문자형을 숫자형으로 변경하거나, 없는 데이터를 평균 값 등으로 치환)으로 변환해주는 과정이 필요합니다.

우선 '원-핫-인코딩' 방식을 이용해 문자형 데이터를 숫자형으로 변경해보겠습니다.

 

STEP 04. 데이터 전처리 2 - One Hot Encoding

다시 데이터 정보를 보면 우리가 예측해야할 종속변수가 61번째 변수로 되어있습니다. 변수가 0번부터 시작하니 실질적으로 62번째에 있는 셈입니다. 이를 이용해 우리가 분석할 독립변수 그룹(X)와 종속 변수 그룹(y)로 나눠주겠습니다.

 

독립변수와 종속변수로 나눠준 후 다시 데이터를 확인해보니 독립변수로 설정한 X에서는 61번째에 있던 voted 변수가 빠지고 총 77개의 변수만이 들어가있는 것을 확인할 수 있습니다. 또한 종속변수로 설정한 y에는 45,532개의 결과값들이 잘 들어가있습니다.

이렇게 데이터를 구분해준 뒤 독립변수인 X 그룹에 존재하는 object 변수들을 pandas의 get_dummies 함수를 이용해 숫자형으로 변경해주는 '원핫인코딩One Hot Encoding'을 수행했습니다.

 

사진에서 확인해보면 문자형으로 되어 있던 나이대나 종교와 같은 변수값이 하나의 변수화되어서 해당 나이대나 종교를 가지고 있으면 1, 아니면 0과 같은 형태로 바뀐 것을 확인할 수 있습니다. 

이에 따라 총 변수의 개수는 shape 함수를 통해 보이는 것과 같이 기존의 77개에서 101개로 증가했습니다.

이제 이렇게 나누어준 변수들을 기준으로 머신러닝을 시작해보겠습니다.

 

STEP 05. 데이터 학습 1차

데이터를 스케일링하기 전에 원본 데이터를 그대로 활용해서 학습시켜 보겠습니다. 수백 개 이상의 변수와 수천만 개 이상의 데이터값이 있는 경우라면 사전에 면밀한 데이터 분석을 통해 스케일링을 하거나 데이터를 자체적으로 나누어 분석하는 것을 추천합니다.

 

제일 먼저 할 것은 독립변수와 종속변수로 나눈 그룹을 다시 학습용 데이터와 테스트용 데이터로 구분하는 것입니다.

다음으로 로그회귀식을 이용해 바로 학습을 시켜보겠습니다.

 

Scikit-Learn 라이브러리 안의 선형 로그회귀 모델을 이용해 학습시키는 과정입니다. solver의 경우 liblinear를 사용했는데, 이는 소량의 데이터 분석에 용이한 형태로 정확성이 높은 대신 학습 속도가 느리다는 단점이 있습니다. 대량의 데이터를 빠르게 분석할 때에는 solver를 sag나 saga로 변경하는 것이 좋습니다.

 

위의 학습 결과에 의하면 훈련 데이터에 대한 정확도는 66.80% 정도이며, 예측 정확도는 66.88% 정도인 것을 확인할 수 있습니다. 참고로 해당 공모전에서 베이스로 제시된 코드대로 데이터를 정제하고 분석했을 때, 약 68%의 정확도가 나온다고 합니다.

 

별다른 스케일링이나 정제 과정을 거치지 않았음에도 제법 괜찮은 수준의 정확도로 보이는데요, 일반적으로 실제 예측에 사용하기 위해서는 정확도를 70% 이상으로 높이는 것을 추천하기에 다음 시간부터는 여러 모델과 옵션 등을 사용해보고, 그에 맞게 데이터를 가공해보는 등의 작업을 하고 이 과정에서 훈련 데이터가 지나치게 반영되어 오히려 모델 자체의 예측력과 성능은 떨어지는 과대적합 문제를 회피하는 등 최적화 작업을 진행해보도록 하겠습니다.