• 카테고리

    질문 & 답변
  • 세부 분야

    딥러닝 · 머신러닝

  • 해결 여부

    미해결

다르게 적용해보는 Feature Engineering2 강의 질문입니다

23.07.30 21:27 작성 조회수 202

0

다르게 적용해보는 Feature Engineering2 강의의 15:13 부분에서 질문입니다

강의에서는

mean_survival_rate = np.mean(df_train['Survived'])

와 같이 df_train 데이터프레임 Survived 컬럼의 값에 대해 평균을 구하고

이를 생존할 확률 이라고 정의하였습니다.

 

저는 Survived 컬럼의 값은 0과 1로만 이루어져 0은 사망, 1은 생존 이라는 의미를 나타내는 명목 척도로 이해하였는데요,

이에 대해 평균을 내면서 값을 구하는 것이 확률로써의 의미를 가질 수 있다는 것이 조금 이해가 되지 않습니다.

제가 잘못 받아들이고 있는 것인지 좀 더 보충 설명 해주시면 너무 감사할 것 같습니다!

답변 1

답변을 작성해보세요.

0

안녕하세요. 답변 도우미입니다.

말씀하신 부분과 관련된 코드가 다음 코드로 이해를 하고 설명드리겠습니다. 기본적으로는 여러 피처를 만들어서, 최대한 예측률이 높은 방향으로 학습을 강화시키는 것이 목적인데요.

Survived 컬럼의 평균을 생존 확률로 사용한다는 용어 부분이 조금 혼란스러우신 것으로 이해를 해도 되겠죠? 우선 이는 이진 분류 문제에서의 통계적인 개념을 기반으로 하고 있습니다.Survived 컬럼은 0과 1의 값만 갖기 때문에, 이 컬럼의 평균은 다음과 같이 계산됩니다:

  • 1의 개수(생존한 승객 수)를 전체 승객 수로 나눈 값

즉, 평균은 생존한 승객의 비율, 즉 생존 확률로 해석될 수 있습니다.

  1. 비율로서의 의미: Survived 컬럼의 평균은 생존한 승객의 비율을 나타냅니다. 전체 승객 중 얼마나 많은 승객이 생존했는지를 나타내는 값이므로, 이 값이 생존 확률로 해석될 수 있습니다.

  2. 확률로서의 의미: 평균 생존률은 "무작위로 선택된 승객이 생존할 확률"로 해석될 수 있습니다. 이 값은 주어진 데이터셋에서의 생존 확률을 나타내는 추정치입니다.

  3. Feature Engineering 에서의 사용: 이 문제에서는 mean_survival_rate가 "생존 정보가 없는 승객에 대한 기본 생존 확률"로 사용되고 있습니다. 동승자가 없는 경우나, 동승자의 생존 정보가 없는 경우에 이 평균 생존률을 사용하는 것입니다.

  4. 명목 척도와 확률: Survived 컬럼은 0과 1의 값만 가지므로 명목 척도로 볼 수 있지만, 이 경우에는 1의 비율을 생존 확률로 해석하는 것이 의미가 있습니다. 베르누이 확률 변수의 확률 질량 함수를 생각하면 이해가 될 수 있습니다. 확률 변수가 1을 취할 확률이 p라면, 0을 취할 확률은 1-p입니다. 여기서 p는 생존 확률, 1-p는 사망 확률로 해석될 수 있습니다.

따라서 Survived 컬럼의 평균은 "생존 확률"로 해석될 수 있으며, 이 값을 사용해서 학습에 도움이 될만한 피처를 만들어낸 것입니다.

감사합니다.

df_family_survived_rate = df_train.groupby('Family_Name')['Survived', 'Family_Size'].median()

family_rates = dict()
for family_name in df_family_survived_rate.index:
    if df_family_survived_rate.loc[family_name][1] > 1 and (family_name in df_train['Family_Name'].unique() and family_name in df_test['Family_Name'].unique()):
        family_rates[family_name] = df_family_survived_rate.loc[family_name][0]

family_survival_rate = list()
family_survival_rate_NA = list()
mean_survival_rate = np.mean(df_train['Survived'])

for i in range(len(df_all)):
    if df_all['Family_Name'][i] in family_rates:
        family_survival_rate.append(family_rates[df_all['Family_Name'][i]])
        family_survival_rate_NA.append(1)
    else:
        family_survival_rate.append(mean_survival_rate)
        family_survival_rate_NA.append(0)

df_all['Family_Survival_Rate'] = family_survival_rate
df_all['Family_Survival_Rate_NA'] = family_survival_rate_NA