python/오늘의 파이썬

[DACON 오늘의 파이썬][Lv1. 의사결정회귀나무로 따릉이 데이터 예측하기]

햄스틴 2021. 10. 28. 20:10

 

 

<EDA>

 

1. 라이브러리 불러오기(import)

데이터를 분석하기 위해 불러오고 조작하는 등 핸들링을 하려면 도구가 필요하다. 

실습에 필요한 라이브러리 pandas를 불러왔다.

import [라이브러리] as [사용할 이름]

import pandas as pd

 

 

2. 파일 불러오기(read_csv())

파일 불러오기에 앞서 데이터 다운로드 링크로 데이터를 코랩에 불러온다.

그리고 pandas의 약어로 지정한 pd를 사용하여 read_csv함수를 통해 csv 파일을 불러올 수 있다.

import pasdas as pd

train = pd.read_csv('data/train.csv')
test = pd.read_csv('data/test.csv')

 

 

3. 행렬 개수 관찰하기(shape)

이제 불러온 데이터의 행과 열의 개수를 Shape attribute로 관찰할 수 있다.

train.shape
test.shape

train.shape 실행 결과: (1459, 11)

test.shape 실행 결과: (715, 10)

 

 

 

4. 데이터 확인하기(head())

pandas 라이브러리를 이용하여 데이터를 확인하는 여러 가지 방법 중 하나인 head() 메서드를 사용한다.

head() 메서드는 데이터를 전부 보여주지 않고 상단부분만 출력하여 보여준다.

head() 메서드를 이용해 train 데이터의 상위 10개 행을 출력하는 코드

train.head(10)

실행 결과:

 

 

5. 결측치 확인하기(is_null())

결특치는 데이터에 값이 없는 것을 뜻한다. NA, Null 등 여러 표현이 있는데, Pandas에서는 NaN으로 표현한다.

Pandas에서 isnull() 메서드를 사용하면 DataFrame에서 NaN 값을 확인 할 수 있다.

데이터가 NaN 값이면 True로, 그렇지 않으면 False로 값을 리턴한다.

isnull()메소드 뒤에 sum() 메서드를 추가해주면 데이터 프레임의 각 열 별 결측치의 수를 확인할 수 있다.

print(train.isnull())
print('\n------------------------train.csv 각 열 별 결측치 수------------------------\n')
print(train.isnull().sum())

실행 결과:

 

 

 

<전처리>

 

1. 데이터 결측치 확인하기(info())

Dataframe에 info() 메서드를 사용하면, 피쳐들의 기본 정보(결측치와 데이터 타입 등 )를 확인할 수 있다.

train.info()
test.info()

train.info() 실행결과:                                                 test.info() 실행결과:

 

 

2. 결측치 삭제하기, 대체하기(dropna(), fillna())

모델링에 앞서 결측치가 있다면, 결측치들을 어떻게 다뤄야 할지 고민하고 처리하는 과정이 필요하다.

결측치를 처리하는 방법은 여러 가지가 있지만(fillna()를 사용해 모든 결측치를 인자 값으로 대체할 수도 있다.)

이번 실습에서는 dropna()를 사용해서 결측치를 갖는 행을 DataFrame 객체에서 삭제하겠다.

train = train.dropna()
test = test.dropna()

 

 

 

<모델링>

이제 본격적으로 머신러닝(Machine Learning) 모델을 훈련시키고, 훈련된 모델을 통해 예측을 해보자.

 

1. scikit-learn(DecisionTreeClassifier)

다양한 머신러닝 모델들을 Python 오픈소스 머신 러닝 라이브러리를 통해 손쉽게 구현할 수 있다.

먼저 scikit-learn 라이브러리를 사용해 모델링을 시작해보자.

import sklearn

 

 

2. 모델개념(의사결정나무)

의사결정나무로 모델링을 하기 앞서 먼저 의사결정나무에 대한 개념을 살펴보자.

결정 트리는 의사 결정 규칙과 그 결과들을 트리 구조로 도식화한 의사 결정 지원 도구의 일종이다.

쉽게 스무고개 방식으로 구조화되는 것이라고 할 수 있다.

 

EDA를 통해 data를 살펴봤을 때, 각 행(row) 들은 피쳐들을 갖고 있었다. 이 중 하나의 피쳐를 정해서 해당 피쳐의 값에 대해 특정한 하나의 값을 정한다면, 이를 기준으로 모든 행(row) 들을 두 개의 노드(node)로 분류(Binary decision rule. 이진분할) 할 수 있다.

만약 특정하게 2개를 정한다면 3진 분할이 되는 것이다. 대표적인 의사결정나무인 CART 의사결정 나무는 이진분할을 사용한다. 

그럼 다시 파생된 두 개의 노드에 대해서 또다시 새로운 피쳐의 특정한 값을 정하고 분류를 진행한다. 그리고 이 과정을 반복하게 되면 점차 피쳐의 값에 따라 data들이 분류가 되며 이것이 의사결정 나무의 원리다.

특정한 값을 정하는 의사결정 나무는 '한쪽 방향으로 쏠리도록'이 대원칙이다. 분류될 때는 공평하게 비슷한 양으로 나뉘도록 값을 정하는 것이 아니라, 한쪽 방향으로 쏠리도록 해주는 특정한 값을 찾는 것이며, 이를 불순도를 계산해서 찾아낸다.

 

의사결정나무 모델은 scikit-learn에서 모듈을 불러올 수 있다.

import sklearn 
from sklearn.tree import DecisionTreeClassifier

 

 

3. 모델선언(DecisionTreeClassifier())

sklearn.tree 라이브러리에서 DecisionTreeRegressor 모듈을 불러온다.

from sklearn.tree import DecisionTreeClassifier
model = DecisionTreeClassifier()

 

 

4. 모델훈련(fit())

모델을 선언한 후, fit(X, Y)함수를 사용해서 모델을 훈련시킬 수 있다.X는 예측에 사용되는 변수들이고, Y는 예측결과 변수이다.

X 데이터는 train data 에서 drop([‘제외할컬럼명’], axis=1) 함수를 이용해 예측할 피쳐를 제외할 수 있다.

Y 데이터는 train[‘예측할컬럼명'] 으로 인덱싱할 수 있다.

그리고 모델을 선언해서 fit()함수를 이용해 모델을 훈련시킬 수 있다.

X_train = train.drop(['count'], axis=1)
Y_train = train['count']

model = DecisionTreeRegressor()
model.fit(X_train, Y_train)

실행결과:

 

 

 

5. 테스트예측(predict())

테스트 파일을 훈련된 모델로 예측해보자. 훈련된 모델에서 predict() 매서드에 예측하고자 하는 data를 인자로 넣어주게 되면 해당 결과 array를 할당할 수 있다.

pred = model.predict(test)
pred[:5]

실행결과:

 

 

 

 

6. 제출파일생성(to_csv())

지금까지 훈련시킨 모델로 테스트 파일을 예측해보았다. 이제 예측결과 csv파일을 만들어보자.

submission.csv 파일을 df 파일로 불러와서 예측결과를 덧입혀준다.

덧입혀준 df 파일을 csv 파일로 내보내면 끝이다.

 

먼저 submission.csv 파일을 read_csv() 를 이용해 df 클래스로 불러온다.

submission = pd.read_csv('data/submission.csv')

submission df 파일의 count 피쳐를 예측결과로 할당한다.

submission['count'] = pred

submission df 파일을 to_csv() 를 이용해 csv 파일로 내보낸다. 여기서 index 옵션은 False 로 지정해주어야 정답 형식과 맞아 떨어져 헤더 오류가 나지 않는다.

submission.to_csv('sub.csv',index=False)

 

 

 

 

 

 

 

 

https://dacon.io/competitions/open/235698/overview/description

 

#오늘의 파이썬 #1일1오파 #파이썬 # python - DACON

좋아요는 1분 내에 한 번만 클릭 할 수 있습니다.

dacon.io