다음과 같은 컬럼을 가지고 있는 데이터셋을 읽어서, 어떠한 고객이 있을때, 그 고객이 얼마정도의 차를 구매할 수 있을지를 예측하여, 그 사람에게 맞는 자동차를 보여주려 합니다.
컬럼 :
- Customer Name
- Customer e-mail
- Country
- Gender
- Age
- Annual Salary
- Credit Card Debt
- Net Worth (순자산)
예측하고자 하는 값 :
- Car Purchase Amount
구글드라이브 import
from google.colab import drive
drive.mount('/content/drive')
필요한 라이브러리 import
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt
import seaborn as sns
import os
os.chdir('/content/drive/csv파일 경로')
인코딩은 ISO-8859-1를 사용합니다.
car_df = pd.read_csv('Car_Purchasing_Data.csv',encoding='ISO-8859-1')
NaN값이 있는지 확인
car_df.isna().sum()
학습을 위해 'Customer Name', 'Customer e-mail', 'Country', 'Car Purchase Amount' 컬럼을 제외한 컬럼만,
X로 만들어야 합니다.
여기서 'Country'는 왜 제외할까요?
컬럼이 너무 많아서 인공지능 학습에 오히려 비효율적입니다.
그래서 필요한 컬럼만 X로 저장합니다.
X = car_df.iloc[:,3:8]
X.head(3)
y 값은 'Car Purchase Amount' 컬럼으로 세팅합니다.
y = car_df['Car Purchase Amount']
y.head(3)
정규화(normalization)를 사용합니다.
MinMaxScaler 를 이용해서 피처 스케일링 하겠습니다.
from sklearn.preprocessing import MinMaxScaler
scaler_X =MinMaxScaler()
X = scaler_X.fit_transform(X)
학습을 위해서, y의 shape을 변경합니다.
scaler_y = MinMaxScaler()
y.values.reshape(500,1)
트레이닝셋과 테스트셋으로 분리합니다.
(테스트 사이즈는 25%로 하며, 랜덤스테이트는 50 으로 세팅하면 저랑 동일한 결과가 나올겁니다.. 아마..)
from sklearn.model_selection import train_test_split
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.25,random_state=50)
RandomForest 나 XGBoost 를 이용
from sklearn.ensemble import RandomForestRegressor
regressor = RandomForestRegressor(random_state=50)
regressor.fit(X_train,y_train)
y_pred=regressor.predict(X_test)
MSE
X_test.shape
y_test 값이 피처스케일링을 통해서 2차원으로 만들어져 있기 때문에 오차를 구하려면 이를 다시 1차원으로 변경시켜 줘야합니다.
y_test=y_test.reshape(125,)
reshape로 1차원으로 변경
error = y_test-y_pred
(error**2).mean()
plt.plot(y_test)
plt.plot(y_pred)
plt.show()
파란색이 정답이고 주황색이 컴퓨터가 풀이한 답입니다.
거의 근접했네요.
예시를 들어보겠습니다.
이 사람의 얼마짜리 차를 구매할 여력이 될까요?
new_data=np.array([0,38,78000,15000,480000])
new_data=new_data.reshape(1,5)
피쳐스케일링을 해줘야 하는데 학습할때 사용한 스케일러가 이미 최대, 최소값들을 가지고 있기 때문에그 스케일러를 이용해서 변환해야 합니다.
new_data = scaler_X.transform(new_data)
y_pred
위 예시의 예측값입니다.
scaler_y.inverse_transform(y_pred.reshape(1,1))
실제 서비스에 적용하려면, 서비스를 운영하고 있는 서버에 scaler_X와 scaler_y, regressor을 줘야합니다.
X스케일러, y스케일러, 인공지능 3개의 파일이 있어야 실제 서비스에 적용할 수 있습니다.
joblib 모델 저장
joblib.dump(scaler_X,'scaler_X.pkl')
joblib.dump(scaler_y,'scaler_y.pkl')
joblib.dump(regressor,'regressor.pkl')
pkl이라는 피클파일이 해당 폴더에 생성되었을 겁니다.
딥러닝을 이용해보기.
'머신러닝' 카테고리의 다른 글
WordCloud Visualizing 스팸이메일 단어 워드클라우드 (0) | 2022.03.29 |
---|---|
Naive Bayes 나이브 베이즈와 Vectorizing 벡터라이징을 이용한 스팸 분류 예시 (0) | 2022.03.29 |
colab에서 구글 드라이브의 csv 파일 읽기 (0) | 2022.03.28 |
구글 Colab 을 이용한 파이썬 개발 환경 설정 (0) | 2022.03.28 |
Hierarchical Clustering 과 Dendrogram 보기 (0) | 2022.03.28 |