train.fillna(train['환불금액'].mode()[0], inplace = True)
test.fillna(test['환불금액'].mode()[0], inplace = True)
from sklearn.preprocessing import LabelEncoder
le = labelEncoder()
train['주구매상품'] = le.fit_transform(train['주구매상품'])
train['주구매지점'] = le.fit_transform(train['주구매지점'])
test['주구매상품'] = le.fit_transform(test['주구매상품'])
test['주구매지점'] = le.fit_transform(test['주구매지점'])
from sklearn.model_selection import train_test_split
X = train.drop(columns = ['성별', '회원ID']
Y = train['성별']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state = 2024)
from sklearn.ensemble import RandomForestClassifier
rfc = RandomForestClassifier(n_estimators = 150, max_depth = 20, random_state = 2024)
rfc.fit(X_train, y_train)
pred1 = rfc.predict(X_test)
from sklearn.metrics import roc_auc_score, accuracy_score
roc = roc_auc_score(y_test, pred)
acc = accuracy_score(y_test, pred)
test_X = test.drop(columns = ['회원ID'])
pred2 = rfc.predict(test_X)
pd.DataFrame({'pred' : pred2}).to_csv('result.csv', index = False)
문제
1. 전체 데이터 목록 4,009행 중 3,800행을 학습용 데이터로 사용하고, 나머지를 테스트 데이터로 사용할 수 있도록 데이터를 슬라이싱한다.
2. 학습용 데이터를 활용하여 모델을 모델링하고, 테스트 데이터를 적용하여 목표변수를(price) 예측하고, 예측결과를 제출한다. (단, 제출 결과는 테스트 데이터의 개수인 209행이 될 수 있도록 한다.)
3. 모델 평가 지표는 RMSE로 한다.
4. 모델 예측 결과는 price 컬럼을 갖고, 예측 결과를 나타내며, index는 표시하지 않는다.
5. 예측 결과 파일명은 다음과 같이 하여 제출한다. (파일명 : result.csv)
import pandas as pd
df = pd.read_csv('https://raw.githubusercontent.com/JEunJin/BigData_python/master/bigdata_csvfile/used_cars_price_data.csv')
print(df.info())
print(df.head())
df['fuel_type'].fillna(df['fuel_type'].mode()[0], inplace = True)
df['accident'].fillna(df['accident'].mode()[0], inplace = True)
df['clean_title'].fillna(df['clean_title'].mode()[0], inplace = True)
from sklearn.preprocessing import LabelEncoder
le = LabelEncoder()
df['brand'] = le.fit_transform(df['brand'])
df['model'] = le.fit_transform(df['model'])
df['milage'] = le.fit_transform(df['milage'])
df['fuel_type'] = le.fit_transform(df['fuel_type'])
df['engine'] = le.fit_transform(df['engine'])
df['transmission'] = le.fit_transform(df['transmission'])
df['ext_col'] = le.fit_transform(df['ext_col'])
df['int_col'] = le.fit_transform(df['int_col'])
df['accident'] = le.fit_transform(df['accident'])
df['clean_title'] = le.fit_transform(df['clean_title'])
df['price'] = le.fit_transform(df['price'])
1) train-test 분할
# 트레인 3800, 테스트 209
train = df.iloc[:3800, :]
test = df.iloc[-209:, :]
2) 독립-종속 (X-y) 분할
from sklearn.model_selection import train_test_split
X = train.drop(columns = ['price'])
y = train['price']
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size = 0.2, random_state = 10)
from sklearn.ensemble import RandomForestRegressor
rfr = RandomForestRegressor(n_estimators = 120, max_depth = 15, random_state = 10)
rfr.fit(X_train, y_train)
pred1 = rfr.predict(X_test)
from sklearn.metrics import mean_squared_error
import numpy as np
mse = mean_squared_error(y_test, pred1)
rmse = np.sqrt(mse)
print(rmse)
test_X_data = test.drop(columns = ['price'])
pred2 = rfr.predict(test_X_data)
pd.DataFrame({'price' : pred2}).to_csv('result.csv', index = False)
result = pd.read_csv('result.csv')
pd.get_dummies(df, columns = ['col1', 'col2']