건물 데이터를 기반으로 건물의 난방 부하(에너지 효율성)를 예측하시오.
- 예측할 컬럼 : Heat_Load(Very Low, Low, Medium, High, Very High)
- 랜덤포레스트 분류 모델 사용 RandomForestClassifier
- 모델의 성능은 Macro F1 - Score로 평가한다.
import pandas as pd
train = pd.read_csv("sample_data/energy_train.csv")
test = pd.read_csv("sample_data/energy_test.csv")
train['Heat_Load'] = train['Heat_Load'].map({
"Very Low" : 0,
"Low" : 1,
"Medium" : 2,
"High" : 3,
"Very High" : 4,
})
print(train.info())
train
train['Roof'].value_counts()
train["Roof"] = train["Roof"].map({
"Small" : 0,
"Medium" : 1,
"Large" : 2,
"220.5" : 3,
})
test["Roof"] = test["Roof"].map({
"Small" : 0,
"Medium" : 1,
"Large" : 2,
"220.5" : 3,
})
train['Height'] = train['Height'].map({
"Short" : 0,
"Tall": 1,
})
test['Height'] = test['Height'].map({
"Short" : 0,
"Tall": 1,
})
train.Orient.unique()
train['Orient'] = train['Orient'].map({
'South' : 0,
'West' : 1,
"East" : 2,
"North" : 3,
})
test['Orient'] = test['Orient'].map({
'South' : 0,
'West' : 1,
"East" : 2,
"North" : 3,
})
from sklearn.preprocessing import MinMaxScaler
scaler = MinMaxScaler()
train['Surf_Area'] = scaler.fit_transform(train[['Surf_Area']])
test['Surf_Area'] = scaler.transform(test[['Surf_Area']])
train['Surf_Area'] = scaler.fit_transform(train[['Surf_Area']])
test['Surf_Area'] = scaler.transform(test[['Surf_Area']])
train['Wall_Area'] = scaler.fit_transform(train[['Wall_Area']])
test['Wall_Area'] = scaler.transform(test[['Wall_Area']])
train['Cool_Load'] = scaler.fit_transform(train[['Cool_Load']])
test['Cool_Load'] = scaler.transform(test[['Cool_Load']])
from sklearn.model_selection import train_test_split
X = train.drop('Heat_Load',axis=1)
y = train['Heat_Load']
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.2)
from sklearn.ensemble import RandomForestClassifier
from sklearn.metrics import f1_score
model = RandomForestClassifier()
model.fit(X_train,y_train)
pred1 = model.predict(X_test)
print(f1_score(y_test,pred1,average="macro"))
pred2 = model.predict(test)
result = pd.DataFrame(pred2,columns=['pred']).to_csv("result.csv",index=False)
result = pd.read_csv("result.csv")
result['pred'] = result['pred'].map({
0: "Very Low" ,
1 : "Low",
2 : "Medium",
3 : "High",
4 : "Very High",
})
result.to_csv("result.csv",index=False)
result
통신사에서 고객에게 청구될 총 금액을 예측하시오.
- 예측할 컬럼 : TotalCharges(총 금액)
- 랜덤포레스트 회귀 모델 사용 RandomForestRegressor
- 모델의 성능은 MAE(Mean Absolute Error)로 평가한다.
train = pd.read_csv("sample_data/churn_train.csv")
test = pd.read_csv("sample_data/churn_test.csv")
train['gender'] = train['gender'].map({
"Male" : 0,
"Female" : 1
})
test['gender'] = test['gender'].map({
"Male" : 0,
"Female" : 1
})
train = train.drop('customerID',axis=1)
test = test.drop('customerID',axis=1)
train['Partner'] = train['Partner'].map({
"No" : 0,
"Yes" : 1
})
test['Partner'] = test['Partner'].map({
"No" : 0,
"Yes" : 1
})
from sklearn.preprocessing import LabelEncoder
encoder = LabelEncoder()
def Encoder(data) :
train[data] = encoder.fit_transform(train[[data]])
test[data] = encoder.transform(test[[data]])
Encoder('Dependents')
Encoder('PhoneService')
Encoder('MultipleLines')
Encoder('InternetService')
Encoder('OnlineSecurity')
Encoder('OnlineBackup')
Encoder('DeviceProtection')
Encoder('TechSupport')
Encoder('StreamingTV')
Encoder('StreamingMovies')
Encoder('Contract')
Encoder('PaperlessBilling')
Encoder('PaymentMethod')
train
from sklearn.model_selection import train_test_split
from sklearn.ensemble import RandomForestRegressor
from sklearn.metrics import mean_absolute_error
X = train.drop("TotalCharges",axis = 1)
y = train["TotalCharges"]
X_train,X_test,y_train,y_test = train_test_split(X,y,test_size=0.2)
model = RandomForestRegressor()
model.fit(X_train,y_train)
pred1 = model.predict(X_test)
score = mean_absolute_error(y_test,pred1)
pred2 = model.predict(test)
result = pd.DataFrame(pred2,columns = ['pred']).to_csv("result.csv",index=False)
result = pd.read_csv("result.csv")
result