View

지난 글에 이어서 작성합니다.

pycaret에서 제공하는 기본 시각화 기능을 살펴보고, 최종 예측을 해보겠습니다.


3. 시각화

3-1. ROC 곡선과 AUC

#둘 다 같은 의미의 코드
plot_model(model_cat)
#plot_model(estimator = model_cat, plot = 'auc')

 

3-2. 오차 행렬

plot_model(estimator = model_cat, plot = 'confusion_matrix')

 

3-3. Feature Importance

plot_model(estimator = model_cat, plot = 'feature')


4. 최종 예측

4-1. 테스트 데이터셋 불러오기

캐글에서 제공하는 타이타닉 데이터는 train과 test 두개로 나뉘어져 있습니다.

test 파일이 train셋과 똑같은 형식을 갖도록 전처리에 썼던 코드를 다시 실행해줍니다.

이번에는 편의상 모든 전처리 코드를 한 블록에 담았습니다.

#불러오기
test= pd.read_csv(r'./test.csv')

#필요없는 속성을 지운다. Ticket과 PassengerId는 삭제한다.
test.drop(['Ticket', 'PassengerId'], axis=1, inplace=True) 

#성별 속성의 값을 male = 0, female = 1 로 수정한다.
gender_mapper = {'male': 0, 'female': 1} 
test['Sex'].replace(gender_mapper, inplace=True) 

#승객 이름에 지위, 직업, 명칭 등 특별한 정보가 붙는지 확인한다.
test['Title'] = test['Name'].apply(lambda x: x.split(',')[1].strip().split(' ')[0]) 
test['Title'] = [0 if x in ['Mr.', 'Miss.', 'Mrs.'] else 1 for x in test['Title']] 
test = test.rename(columns={'Title': 'Title_Unusual'}) 
test.drop('Name', axis=1, inplace=True) 

#선실의 정보도 새로운 속성에 저장한다.
test['Cabin_Known'] = [0 if str(x) == 'nan' else 1 for x in test['Cabin']] 
test.drop('Cabin', axis=1, inplace=True) 

#승선지에 관한 가변수 생성 - dummy variables
emb_dummies = pd.get_dummies(test['Embarked'], drop_first=True, prefix='Embarked') 
test = pd.concat([test, emb_dummies], axis=1) 
test.drop('Embarked', axis=1, inplace=True) 

#비어있는 나이 값은 평균으로 채운다.
test['Age'] = test['Age'].fillna(int(test['Age'].mean()))

test.head() #확인

 

4-2. finalize_model(), predict_model()

예측하기 전에, setup()으로 생성했던 모델에는 학습에 사용되지 않는 데이터가 일부 존재합니다.

이 데이터들은 과소적합을 확인하기 위해 별도로 사용된다고 합니다.

그렇기에, 모든 데이터셋으로 학습한 최종모델을 만드는 과정이 필요합니다.

모델을 확정한다고 보면 될 것 같습니다.

참고: https://pycaret.org/finalize-model/

#Finalize model_cat
cat_final = finalize_model(model_cat)

#Predict - 최종모델로 예측 진행!
predict_cat = predict_model(cat_final, test)

 

4-3. 최종 예측값 확인

predict_model()로 만들어진 데이터셋에서, Label이 최종 예측값입니다.

Label = 1인 경우가 생존입니다.

predict_cat.head()


5. 제출하기

캐글에서 요구하는 제출양식대로 csv 파일을 생성합니다.

[승객ID: 생존여부] 형식대로 맞추면 되겠습니다.

ID_list = pd.read_csv(r'./test.csv')['PassengerId']
predict_list = [predict_cat]
name = ['cat']

def submission_csv(predict_list, name):
    
    for i in range(len(predict_list)):
        
        submission = pd.DataFrame({
            "PassengerId": ID_list,
            "Survived": predict_list[i]['Label']
        })
    
        submission.to_csv('submission_'+name[i]+'.csv', index=False)
    
submission_csv(predict_list,name)

저는 추가적으로 다른 모델들도 함께 예측해서 최종결과가 여러개가 나왔기에

한번에 저장하기 쉽도록 코드를 짜서 조금 복잡해보이네요.

 

파일 하나만 생성할 때는 아래처럼 작성하면 됩니다.

submission = pd.DataFrame({
	"PassengerId": pd.read_csv(r'./test.csv')['PassengerId'],
	"Survived": predict_cat['Label']})
    
submission.to_csv('submission_cat'+'.csv', index=False)

이제 기념비적인 첫 제출!

리더보드를 쭉 내리다보면 순위가 나옵니다.

정확도는 약 78%인데 모델링할 때 나왔던 약 83%보다 낮은 값이네요.

타이타닉의 경우, 캐글에서 정확도가 80%를 넘으면 좋은 결과라고 합니다.

데이터 전처리와 EDA에 좀 더 신경쓰면 다른 결과가 나올지도 모르겠습니다.

기회가 되면 다시 도전해보는걸로!

Share Link
reply
«   2025/02   »
1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28