논리 회귀 분석으로 타이타닉 호의 생존자를 예측하다
입문
캐글비 대 (타이타닉 생존자 예측) 논리 회귀 분석을 통해 진행한다.
또한 목표 변수의 결과(사망 또는 생존)에 대한 영향도(회귀계수)를 확인한다.
이번 소스 파일은 여기
대상을 대상으로 프로그램을 쓰는 연습도 겸한다.소스가 더러운 것을 용서해 주세요.
환경
데이터 다운로드
제목 페이지 데이터를 다운로드합니다.
※ 사용자 로그인이 필요합니다.
데이터 확인 및 사전 처리
학습용, 테스트용 데이터를 확인하고 결손값을 보완하고 편차값, 성별 등 분류 카드 변수(정적 데이터)를 대체하여 One-Hot-Encoding을 통해 수치화(벡터화)한다.
변수 설명
변수 이름
설명
값 설명
비고
PassengerID
승객 ID
버튼
Survived
생존 표지
0 = 사망, 1 = 생존
대상 변수
Pclass
티켓 클래스
1 = 상층, 2 = 중층, 3 = 하층
Name
성함
설명 변수에서 제외
Sex
성별
남성
Age
나이.
SibSp
동승한 형제나 배우자의 수
0, 1, 2, 3, 4, 5, 8
Parch
동승한 부모와 아이의 수
0, 1, 2, 3, 4, 5, 6, 9
값 9 테스트 데이터만 표시
Ticket
티켓 번호
설명 변수에서 제외
Fare
비용
Cabin
객실 번호
설명 변수에서 제외
Embarked
타이타닉 호를 탄 항구
C=Cherbourg, Q=Queenstown, S=Southampton
데이터 확인 (기본 통계량)
학습용 데이터와 테스트용 데이터의 수치 데이터의 기본 통계량을 확인한다.
데이터 확인을 위한 소스 파일은 여기学習用データの基本統計量
Survived Pclass Age SibSp Parch Fare
count 891.000000 891.000000 891.000000 891.000000 891.000000 891.000000
mean 0.383838 2.308642 29.361582 0.523008 0.381594 32.204208
std 0.486592 0.836071 13.019697 1.102743 0.806057 49.693429
min 0.000000 1.000000 0.420000 0.000000 0.000000 0.000000
25% 0.000000 2.000000 22.000000 0.000000 0.000000 7.910400
50% 0.000000 3.000000 28.000000 0.000000 0.000000 14.454200
75% 1.000000 3.000000 35.000000 1.000000 0.000000 31.000000
max 1.000000 3.000000 80.000000 8.000000 6.000000 512.329200
テスト用データの基本統計量
PassengerId Pclass Age SibSp Parch Fare
count 418.000000 418.000000 418.000000 418.000000 418.000000 418.000000
mean 1100.500000 2.265550 29.599282 0.447368 0.392344 35.576535
std 120.810458 0.841838 12.703770 0.896760 0.981429 55.850103
min 892.000000 1.000000 0.170000 0.000000 0.000000 0.000000
25% 996.250000 1.000000 23.000000 0.000000 0.000000 7.895800
50% 1100.500000 3.000000 27.000000 0.000000 0.000000 14.454200
75% 1204.750000 3.000000 35.750000 1.000000 0.000000 31.471875
max 1309.000000 3.000000 76.000000 8.000000 9.000000 512.329200
부족한 값을 메우다
누락된 값이 있는 Age Cabin Embarked Fare를 보완합니다.
크기를 나타내는 숫자(Age Fare)는 중간 값과 일치하고 카테고리 변수(Cabin Embarked)는 가장 빈번한 값과 일치합니다.df['Age'] = df['Age'].fillna(df['Age'].median()) ## 中央値
df['Cabin'] = df['Cabin'].fillna(df['Cabin'].mode()) ## 最頻値
df['Embarked'] = df['Embarked'].fillna(df['Embarked'].mode()) ## 最頻値
df['Fare'] = df['Fare'].fillna(df['Fare'].median()) ## 中央値
오프셋 값 대체
Parch 값 9은 테스트용 데이터에만 표시되므로 학습용 데이터의 최대 값 6으로 대체됩니다.
(각각 학습용 데이터와 테스트용 데이터에 대해 One-Hot-Encoding을 진행하면 학습용과 테스트용 변수의 수가 다르기 때문에 테스트용 데이터를 예측하는 데 오류가 발생함)df['Parch'] = np.where(df['Parch']==9, 6, df['Parch'])
One-Hot-Encoding
범주 변수(Sex·Pclass·SibSp·Parch·Embarked)에 대한 수치(벡터화)를 지정합니다.df_dummies = pd.get_dummies(df, columns=['Sex', 'Pclass', 'SibSp', 'Parch', 'Embarked'])
표준화 데이터
연속값의 Age Fare를 표준화(평균 0 • 방차 1)하고 새 열(Age_scale • Fare_scale)에 저장합니다.scaler = StandardScaler()
df_dummies['Age_scale'] = scaler.fit_transform(df_dummies.loc[:, ['Age']])
df_dummies['Fare_scale'] = scaler.fit_transform(df_dummies.loc[:, ['Fare']])
논리 회귀 예측 모델
학습용 데이터를 훈련용과 검증용으로 나누고 훈련용 데이터로 예측 모델을 만든다.
예측 모델 생성하기
정규화 매개 변수 C는 기본값 1.0이고, 가장 좋은 매개 변수 검색 방법인 solver는 기본값 liblinear입니다.c = 1.0 ## 正則化のパラメータ(デフォルト 1.0)
## ロジスティック回帰のモデル
self.clf = linear_model.LogisticRegression(C=c, solver='liblinear', random_state=0)
## 予測モデルを作成
titanic.model(X_train, y_train)
예측 모델 정밀도
예측 검증용 데이터의 정확도(Accuracy)는 0.82로 매우 정확하다.
Accuracy =(TP + TN)/(TP + FP + FN + TN)
= (97+ 49)/(97 + 20 + 13 + 49)
= 0.82混同行列(検証用データ)
[[97 13]
[20 49]]
分類レポート(検証用データ)
precision recall f1-score support
死亡 0.83 0.88 0.85 110
生存 0.79 0.71 0.75 69
accuracy 0.82 179
macro avg 0.81 0.80 0.80 179
weighted avg 0.81 0.82 0.81 179
설명 변수의 영향도 확인(회귀 계수)
각 설명 변수가 예측 모델 목표 변수 결과(사망 또는 생존)에 미치는 영향 정도(회귀 계수)를 확인한다.
회귀 계수는 정영향 목표 변수 1(생존), 음영향 목표 변수 0(사망)이다.
그 밖에 회귀 계수의 절대치가 클수록 영향이 크다.
예측 구현
예측 모델에서 테스트용 데이터를 예측하고 kaggle 경기에 투고한다.
카글에 대한 투고 결과
Kaggle의 점수는 0.76076으로 9066위(2019년 7월 26일 13:23JST 현재)에 올랐다.
정밀도를 한층 높이기 위해
Kaggle 경기의 석차는 미묘한 석차(나쁜 석차)로 좋은 석차를 얻기 위해서는 더욱 정밀도를 높여야 한다.
이를 위해 다음과 같은 내용을 고려한다.
학습용, 테스트용 데이터를 확인하고 결손값을 보완하고 편차값, 성별 등 분류 카드 변수(정적 데이터)를 대체하여 One-Hot-Encoding을 통해 수치화(벡터화)한다.
변수 설명
변수 이름
설명
값 설명
비고
PassengerID
승객 ID
버튼
Survived
생존 표지
0 = 사망, 1 = 생존
대상 변수
Pclass
티켓 클래스
1 = 상층, 2 = 중층, 3 = 하층
Name
성함
설명 변수에서 제외
Sex
성별
남성
Age
나이.
SibSp
동승한 형제나 배우자의 수
0, 1, 2, 3, 4, 5, 8
Parch
동승한 부모와 아이의 수
0, 1, 2, 3, 4, 5, 6, 9
값 9 테스트 데이터만 표시
Ticket
티켓 번호
설명 변수에서 제외
Fare
비용
Cabin
객실 번호
설명 변수에서 제외
Embarked
타이타닉 호를 탄 항구
C=Cherbourg, Q=Queenstown, S=Southampton
데이터 확인 (기본 통계량)
학습용 데이터와 테스트용 데이터의 수치 데이터의 기본 통계량을 확인한다.
데이터 확인을 위한 소스 파일은 여기
学習用データの基本統計量
Survived Pclass Age SibSp Parch Fare
count 891.000000 891.000000 891.000000 891.000000 891.000000 891.000000
mean 0.383838 2.308642 29.361582 0.523008 0.381594 32.204208
std 0.486592 0.836071 13.019697 1.102743 0.806057 49.693429
min 0.000000 1.000000 0.420000 0.000000 0.000000 0.000000
25% 0.000000 2.000000 22.000000 0.000000 0.000000 7.910400
50% 0.000000 3.000000 28.000000 0.000000 0.000000 14.454200
75% 1.000000 3.000000 35.000000 1.000000 0.000000 31.000000
max 1.000000 3.000000 80.000000 8.000000 6.000000 512.329200
テスト用データの基本統計量
PassengerId Pclass Age SibSp Parch Fare
count 418.000000 418.000000 418.000000 418.000000 418.000000 418.000000
mean 1100.500000 2.265550 29.599282 0.447368 0.392344 35.576535
std 120.810458 0.841838 12.703770 0.896760 0.981429 55.850103
min 892.000000 1.000000 0.170000 0.000000 0.000000 0.000000
25% 996.250000 1.000000 23.000000 0.000000 0.000000 7.895800
50% 1100.500000 3.000000 27.000000 0.000000 0.000000 14.454200
75% 1204.750000 3.000000 35.750000 1.000000 0.000000 31.471875
max 1309.000000 3.000000 76.000000 8.000000 9.000000 512.329200
부족한 값을 메우다
누락된 값이 있는 Age Cabin Embarked Fare를 보완합니다.
크기를 나타내는 숫자(Age Fare)는 중간 값과 일치하고 카테고리 변수(Cabin Embarked)는 가장 빈번한 값과 일치합니다.
df['Age'] = df['Age'].fillna(df['Age'].median()) ## 中央値
df['Cabin'] = df['Cabin'].fillna(df['Cabin'].mode()) ## 最頻値
df['Embarked'] = df['Embarked'].fillna(df['Embarked'].mode()) ## 最頻値
df['Fare'] = df['Fare'].fillna(df['Fare'].median()) ## 中央値
오프셋 값 대체
Parch 값 9은 테스트용 데이터에만 표시되므로 학습용 데이터의 최대 값 6으로 대체됩니다.
(각각 학습용 데이터와 테스트용 데이터에 대해 One-Hot-Encoding을 진행하면 학습용과 테스트용 변수의 수가 다르기 때문에 테스트용 데이터를 예측하는 데 오류가 발생함)
df['Parch'] = np.where(df['Parch']==9, 6, df['Parch'])
One-Hot-Encoding
범주 변수(Sex·Pclass·SibSp·Parch·Embarked)에 대한 수치(벡터화)를 지정합니다.
df_dummies = pd.get_dummies(df, columns=['Sex', 'Pclass', 'SibSp', 'Parch', 'Embarked'])
표준화 데이터
연속값의 Age Fare를 표준화(평균 0 • 방차 1)하고 새 열(Age_scale • Fare_scale)에 저장합니다.
scaler = StandardScaler()
df_dummies['Age_scale'] = scaler.fit_transform(df_dummies.loc[:, ['Age']])
df_dummies['Fare_scale'] = scaler.fit_transform(df_dummies.loc[:, ['Fare']])
논리 회귀 예측 모델
학습용 데이터를 훈련용과 검증용으로 나누고 훈련용 데이터로 예측 모델을 만든다.
예측 모델 생성하기
정규화 매개 변수 C는 기본값 1.0이고, 가장 좋은 매개 변수 검색 방법인 solver는 기본값 liblinear입니다.c = 1.0 ## 正則化のパラメータ(デフォルト 1.0)
## ロジスティック回帰のモデル
self.clf = linear_model.LogisticRegression(C=c, solver='liblinear', random_state=0)
## 予測モデルを作成
titanic.model(X_train, y_train)
예측 모델 정밀도
예측 검증용 데이터의 정확도(Accuracy)는 0.82로 매우 정확하다.
Accuracy =(TP + TN)/(TP + FP + FN + TN)
= (97+ 49)/(97 + 20 + 13 + 49)
= 0.82混同行列(検証用データ)
[[97 13]
[20 49]]
分類レポート(検証用データ)
precision recall f1-score support
死亡 0.83 0.88 0.85 110
生存 0.79 0.71 0.75 69
accuracy 0.82 179
macro avg 0.81 0.80 0.80 179
weighted avg 0.81 0.82 0.81 179
설명 변수의 영향도 확인(회귀 계수)
각 설명 변수가 예측 모델 목표 변수 결과(사망 또는 생존)에 미치는 영향 정도(회귀 계수)를 확인한다.
회귀 계수는 정영향 목표 변수 1(생존), 음영향 목표 변수 0(사망)이다.
그 밖에 회귀 계수의 절대치가 클수록 영향이 크다.
예측 구현
예측 모델에서 테스트용 데이터를 예측하고 kaggle 경기에 투고한다.
카글에 대한 투고 결과
Kaggle의 점수는 0.76076으로 9066위(2019년 7월 26일 13:23JST 현재)에 올랐다.
정밀도를 한층 높이기 위해
Kaggle 경기의 석차는 미묘한 석차(나쁜 석차)로 좋은 석차를 얻기 위해서는 더욱 정밀도를 높여야 한다.
이를 위해 다음과 같은 내용을 고려한다.
c = 1.0 ## 正則化のパラメータ(デフォルト 1.0)
## ロジスティック回帰のモデル
self.clf = linear_model.LogisticRegression(C=c, solver='liblinear', random_state=0)
## 予測モデルを作成
titanic.model(X_train, y_train)
混同行列(検証用データ)
[[97 13]
[20 49]]
分類レポート(検証用データ)
precision recall f1-score support
死亡 0.83 0.88 0.85 110
生存 0.79 0.71 0.75 69
accuracy 0.82 179
macro avg 0.81 0.80 0.80 179
weighted avg 0.81 0.82 0.81 179
각 설명 변수가 예측 모델 목표 변수 결과(사망 또는 생존)에 미치는 영향 정도(회귀 계수)를 확인한다.
회귀 계수는 정영향 목표 변수 1(생존), 음영향 목표 변수 0(사망)이다.
그 밖에 회귀 계수의 절대치가 클수록 영향이 크다.
예측 구현
예측 모델에서 테스트용 데이터를 예측하고 kaggle 경기에 투고한다.
카글에 대한 투고 결과
Kaggle의 점수는 0.76076으로 9066위(2019년 7월 26일 13:23JST 현재)에 올랐다.
정밀도를 한층 높이기 위해
Kaggle 경기의 석차는 미묘한 석차(나쁜 석차)로 좋은 석차를 얻기 위해서는 더욱 정밀도를 높여야 한다.
이를 위해 다음과 같은 내용을 고려한다.
Kaggle 경기의 석차는 미묘한 석차(나쁜 석차)로 좋은 석차를 얻기 위해서는 더욱 정밀도를 높여야 한다.
이를 위해 다음과 같은 내용을 고려한다.
보충하여 기록하다
전체 학습용 데이터에서 예측 모델을 훈련할 때(기타 조건은 변하지 않음)
Kaggle의 점수는 0.77033으로 6759위(2019년 7월 26일 13:40JST 현재)에 올랐다.
Reference
이 문제에 관하여(논리 회귀 분석으로 타이타닉 호의 생존자를 예측하다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/shibata0523/items/894f7e97cf4e648ed56e
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(논리 회귀 분석으로 타이타닉 호의 생존자를 예측하다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/shibata0523/items/894f7e97cf4e648ed56e텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)