Kaggle | 1st practice

python
kaggle
titanic
Author

강신성

Published

2023-09-13

Kaggle의 competition에 대해 차근차근히 알아보고 첫 제출까지 해보도록 하자.

1. 라이브러리 imports

import numpy as np
import pandas as pd
# 캐글에 있는 노트북을 이용하면 가상 컴퓨터에 세 개의 파일들이 직접 들어온다.

tr = pd.read_csv("./data/train.csv")
tr.head()
PassengerId Survived Pclass Name Sex Age SibSp Parch Ticket Fare Cabin Embarked
0 1 0 3 Braund, Mr. Owen Harris male 22.0 1 0 A/5 21171 7.2500 NaN S
1 2 1 1 Cumings, Mrs. John Bradley (Florence Briggs Th... female 38.0 1 0 PC 17599 71.2833 C85 C
2 3 1 3 Heikkinen, Miss. Laina female 26.0 0 0 STON/O2. 3101282 7.9250 NaN S
3 4 1 1 Futrelle, Mrs. Jacques Heath (Lily May Peel) female 35.0 1 0 113803 53.1000 C123 S
4 5 0 3 Allen, Mr. William Henry male 35.0 0 0 373450 8.0500 NaN S
tst = pd.read_csv('./data/test.csv')
tst.head()
PassengerId Pclass Name Sex Age SibSp Parch Ticket Fare Cabin Embarked
0 892 3 Kelly, Mr. James male 34.5 0 0 330911 7.8292 NaN Q
1 893 3 Wilkes, Mrs. James (Ellen Needs) female 47.0 1 0 363272 7.0000 NaN S
2 894 2 Myles, Mr. Thomas Francis male 62.0 0 0 240276 9.6875 NaN Q
3 895 3 Wirz, Mr. Albert male 27.0 0 0 315154 8.6625 NaN S
4 896 3 Hirvonen, Mrs. Alexander (Helga E Lindqvist) female 22.0 1 1 3101298 12.2875 NaN S

2. Kaggle Competition

A. 데이터 구경


- 데이터의 설명을 빠르게 파악하는 방법

1. 변수 위주로 kaggle 홈페이지에서 파악
1. 구글 번역기 사용
1. ChatGPT 이용

ChatGPT가 옳지 않은 소리를 할 때도 있지만, 처음에 데이터에 대한 개념을 빠르게 정리하고자 할 때 도움이 된다.

변수 이름이 약어로 된 경우가 많은데, 이럴 경우 GPT가 유용하다.

### B. 메뉴

  1. Overview(개요)
  • 경진대회 주최자가 경진 대회의 배경, 목표, 데이터셋 설명 등을 기술.
  1. Data(데이터)
  • 경진대회에 사용되는 데이터셋에 관한 정보를 찾을 수 있음.
  • 데이터의 구성, 변수 설명, 예시 데이터 등이 제공되며, 데이터를 이해하고 분석할 수 있는데 필요한 정보들이 포함됨.
  1. Code(코드)
  • 경진대회 참가자들이 코드를 공유하고 토론하는 공간.
  • 주로 주어진 문제에 대한 데이터 분석 및 모델링 코드, 데이터 전처리 방법, 모델 학습 등에 관련된 내용이 포함됨.
  1. Discussion(토론)
  • 참가자들이 서로 의견을 교환하고 질문을 주고받을 수 있는 공간.
  • 데이터 분석 방법, 모델 구축 전략, 문제 해결 과정 등에 대한 토론이 이뤄짐.
  1. Leaderboard(리더보드)
  • 경진대회 참가자들의 모델에 대한 성능 평가 지표와 순위가 나열.
  • 참가자들의 모델 성능을 비교하고 경쟁 상황을 실시간으로 확인할 수 있음.
  1. Rule(규칙)
  • 참가자들이 따라야 할 규칙, 데이터 사용 작업, 평가 지표 등이 명시되어 있음.

- 체크하면 좋은 것들 * Overview : martic, prize, timeline * Rules : matric, 외부데이터 사용 가능 여부, 하루 최대 제출 수, 최종 선택 가능한 솔루션 수(limit)

- 대회의 유형 * Getting Started : 상을 제공하지 않음. 튜토리얼 전용. * Featured : 가장 일반적인 유형, 스폰서 회사의 비즈니스 관련 문제이므로 상금이 후함. 솔루션을 소개하는 자세한 리포트를 준비해야 하고 발표할 것을 요구받을 수 있음. * Analytics : 질적 평가. 참가자의 PPT를 제출로 받음.

3. 데이터 분석

A.test


- 제출 결과는 리더보드에서 확인 가능

- 답을 알 수 없고 제출해야 스코어만 확인할 수 있음

### B. train - 스스로 풀어보고 채점할 수 있음

- train 데이터를 채점해보자.

# accuracy의 계산

df = pd.DataFrame({'surv' : [1,0,1,1,0], 'sex' : ['f','m','f','m','m']})

- surv+열과 sex열에서 sex == f이면 생존(1), 그렇지 않으면 사망(0)이라고 예측

df.surv
0    1
1    0
2    1
3    1
4    0
Name: surv, dtype: int64
df.sex
0    f
1    m
2    f
3    m
4    m
Name: sex, dtype: object
(df.sex == 'f')*1  ## bool이 원소인 list에 1을 곱해준다. f이면 1
0    1
1    0
2    1
3    0
4    0
Name: sex, dtype: int32

- 결과를 정리하면 아래와 같다.

pd.DataFrame({'real' : df.surv, 'estimate' : (df.sex == 'f')*1})
real estimate
0 1 1
1 0 0
2 1 1
3 1 0
4 0 0
print((df.surv == (df.sex == 'f')*1).sum()/5)
##print((df.surv == (df.sex == 'f')*1).mean()) ## 동일한 코드
0.8

- 실제 train 자료에 접목해서 여성만 생존한다고 하여 accuracy를 구해보자.

(tr.Survived == (tr.Sex == 'female')*1).mean()
0.7867564534231201
(tr.Survived == (tr.Sex == 'female')).mean()  ## True or False는 0, 1로도 구분되나보다.
0.7867564534231201

- 그러면 예측한 데이터프레임을 파일로 만들어서 보내보자.

tst[['PassengerId']].assign(Survived = (tst.Sex == 'female')*1)
PassengerId Survived
0 892 0
1 893 1
2 894 0
3 895 0
4 896 1
... ... ...
413 1305 0
414 1306 1
415 1307 0
416 1308 0
417 1309 0

418 rows × 2 columns

tst[['PassengerId']].assign(Survived = (tst.Sex == 'female')*1).to_csv("gender_submission.csv", index = False)

해당 파일을 캐글에 업로드하면 submission이 완료된다.

index를 날려줘야 원하는 형식이 된다. (index = False를 하지 않으면 csv파일에 index의 숫자가 같이 저장된다…)

4. 개념

- 캐글 대회는 시험과 비슷하다. * 캐글대회를 여는 사람은 보통 (1) 모의고사문제+답 (training set) (2) 실제시험문제 (test set)를 준다. * (1)의 자료에서는 문제(X,독립변수,설명변수)와 답(y,종속변수,반응변수)이 함께 주어진다. * (2)의 자료에서는 문제(X,독립변수,설명변수)만 주어진다. * 우리는 (1)을 이용하여 문제(X,독립변수,설명변수)와 답(y,종속변수,반응변수)사이의 관계를 찾아내는 훈련을 한다. * 그리고 그 훈련이 잘 되었는지를 평가하기 위해서 (2)를 풀어보고 그 결과를 제출한다.