빅분기 실기 작업형 2유형 결측값 처리, 라벨인코딩 정리할게요!
Вставка
- Опубліковано 20 сер 2024
- import pandas as pd
train = pd.read_csv("data/customer_train.csv")
test = pd.read_csv("data/customer_test.csv")
#데이터 로드 및 확인
#print(train.info()) #결측값 처리(환불금액) / 라벨인코딩(주구매상품, 주구매지점)
#print(test.info())
#결측값 대체(최빈값)
train.fillna(train['환불금액'].mode()[0], inplace=True)
test.fillna(train['환불금액'].mode()[0], inplace=True)
#print(train.info())
#print(test.info())
#라벨인코딩
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['주구매지점'])
#print(train.info())
#print(test.info())
#케이스1
#만약 테스트 데이터에 트레인 데이터에는 없는 라벨이 있어 오류가 발생한 경우
total = pd.concat([train, test])
#print(total)
le.fit(total['주구매상품'])
total['주구매상품']= le.transform(total['주구매상품'])
le.fit(total['주구매지점'])
total['주구매지점']= le.transform(total['주구매지점'])
#합쳐진 데이터 train, test 데이터로 재분할
train = total.iloc[:3500,:]
test = total.iloc[-2482:,:10]
train = train.astype({'성별':'int'})
print(train.info())
print(test.info())
#케이스2 (케이스1이 아닌 경우)
#le.fit(train['주구매상품'])
#train['주구매상품'] = le.transform(train['주구매상품'])
#test['주구매상품'] = le.transform(test['주구매상품'])
#le.fit(train['주구매지점'])
#train['주구매지점'] = le.transform(train['주구매지점'])
#test['주구매지점'] = le.transform(test['주구매지점'])
#print(train.info())
#print(test.info())
#print(total['주구매상품'])
#데이터 분할
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) #pred1 : train 데이터에대한 예측 값
#성능평가
from sklearn.metrics import roc_auc_score, accuracy_score
roc = roc_auc_score(y_test, pred1)
acc = accuracy_score(y_test, pred1)
print('roc:', roc) #0.6023 / 0.6023
print('acc:', acc) #0.6642 / 0.6642
#테스트 데이터 예측
test_X = test.drop(columns=['회원ID'])
pred2=rfc.predict(test_X)
print(pred2)
#결과 데이터 제출 및 확인
pd.DataFrame({'pred':pred2}).to_csv('result.csv', index=False)
result = pd.read_csv('result.csv')
print(result)
교수님 너무 감사합니다. 덕분에 합격했어요. 미리알았다면...책도 구매했을텐데.. 시험앞두고 도움많이 되었습니다. 감사합니다
어머나 세상에! 너무 좋은 소식 전해주셔서 감사해요! 합격 축하드려요!! 😊
교수님 너무 감사합니다 잘보겠습니다!
시험 앞두고 도움이 많이 되었어요~ 시험 잘 보고 오겠습니다 ! 감사합니다 ㅎ
와 시험 맞춤형 강의!! ㅎㅎ 깔끔하네요 ! 고맙습니다
대단한 설명입니다 감사합니다
와우 넘 빠른데요...ㅎㅎ 감사합니다 :) 넵 최빈값으로 결측치를 처리하되 만약 Nan이 최빈값이면 큰일이죠 ㅎㅎ
감사합니다 교수님. 다름이 아니라 케이스1 같은 경우는 결과값으로 예측해야 하는 성별이랑은 별개로 다른 라벨이 없어서 오류가 발생한 경우의 수를 말씀하시는건가요?
네 목표변수(성별)가 아닌 다른 컬럼 중에 라벨인코딩 해주는 부분에 대해서 말씀드린거예요!