ADP 31회 실기 문제#

Hits

데이터설명

  • 데이터 출처 : https://www.kaggle.com/datasets/mandysia/obesity-dataset-cleaned-and-data-sinthetic 후처리

  • 데이터 링크 : https://raw.githubusercontent.com/Datamanim/datarepo/main/adp/31/adp_31_1_obesity_v2.csv

  • 데이터 설명 : 각 환자의 의료정보이다. NObeyesdad를 종속변수로 하는 분류모델을 만드려고 한다.

    id: unique id for each row
    Gender: sex - male or female
    Age: age
    Height: height
    Weight: weight
    family_history_with_overweight: Has a family member suffered or suffers f from overweight? - yes or no
    FAVC: Frequent consumption of high caloric food - yes or no
    FCVC: Frequency of consumption of vegetables - Never, Sometimes, Always
    NCP: Number of main meals - 1, 2, 3, 4
    CAEC: Consumption of food between meals - No, Sometimes, Frequently, Always
    SMOKE: Do you smoke - yes o no
    CH2O: Consumption of water daily - Less than a litter, between 1 and 2 l, more than 2 l
    SCC: Calories consumption monitoring - yes or no
    FAF: Physical activity frequency - 0, 1 to 2, 2 to 4, 4 to 5
    TUE: Time using technology devices - 0 to 2, 3 to 5, >5
    CALC: Consumption of alcohol - no, sometimes, frequently, always
    MTRANS: Transportation used - automobile, motorbike, bike, public_transportation, walking
    BMI: Body mass index

    (종속변수)
    NObeyesdad: Type of obesity - overweight-level_i, obesity_type_i, obesity_type_ii, obesity_type_iii

import pandas as pd 
df = pd.read_csv("https://raw.githubusercontent.com/Datamanim/datarepo/main/adp/31/adp_31_1_obesity_v2.csv",index_col=0)
df.head()
id Gender Age Height Weight family_history_with_overweight FAVC FCVC NCP CAEC SMOKE CH2O SCC FAF TUE CALC MTRANS NObeyesdad BMI
0 4 male 27 1.80 87 no no always 3 sometimes no between 1 and 2 l no 2 to 4 0 to 2 frequently walking overweight_level_i 26.851852
1 11 male 26 1.85 105 yes yes always 3 frequently no more than 2 l no 2 to 4 >5 sometimes public_transportation obesity_type_i 30.679328
2 14 male 41 1.80 99 no yes sometimes 3 sometimes no between 1 and 2 l no 2 to 4 3 to 5 frequently automobile obesity_type_i 30.555556
3 18 female 29 1.53 78 no yes sometimes 1 sometimes no between 1 and 2 l no 0 0 to 2 no automobile obesity_type_i 33.320518
4 20 female 23 1.65 70 yes no sometimes 1 sometimes no between 1 and 2 l no 0 0 to 2 sometimes public_transportation overweight_level_i 25.711662

1-1

EDA & 결측치 및 이상치를 판단하고 처리하라

#

1-2

데이터 전처리 기법 2가지를 설명하고 주어진 데이터에 적용시 어떤 효과가 있는지 설명하라

#

1-3

피쳐 엔지니어링을 통해 파생변수 1개를 생성하고 그 이유를 말하라

#

2-1

앙상블을 제외한 분류 모델 3가지 구축 및 결과 비교 및 설명하라

#

2-2

2-1에서 사용한 모델 중 하나를 골라 그리드 서치를 통해서 파라미터 튜닝 및 분류 모델 성능 평가 (precision ,recall)

#

2-3

2-1의 3가지 모델을 soft voting을 이용하여 모델링 한 결과와 2-2과 비교하라

#

3-1

하나의 모델을 선정하여 Drop Column Importance 방식으로 각 변수 별로 전체 컬럼을 포함한 모델과의 recall 값의 차이를 계산하고 시각화 하라

#

데이터 설명

df =pd.read_csv('https://raw.githubusercontent.com/Datamanim/datarepo/main/adp/31/adp_31_2_v2.csv')
df.head()
ID weight 생년월일 건강검진일 공학여부 채소섭취정도 아침식사여부 일주일운동시간 수면시간 성별
0 ID_4135 169.01 65.47 20041003 2020_11_15 1 2 1 4.4 8.3 남성
1 ID_3289 181.62 69.36 19970725 2014_11_20 0 3 0 4.4 6.9 남성
2 ID_1847 160.89 65.12 20020921 2020_01_28 1 1 1 1.7 9.6 여성
3 ID_4785 162.21 62.28 20020106 2018_09_27 1 4 0 5.1 6.8 남성
4 ID_5693 159.13 54.11 19980708 2015_03_03 0 4 1 0.3 8.5 여성

4-1

아래의 기준으로 전처리를 하여 적정 체중 여부 컬럼을 생성하고 BMI를 5단위로 구분하여 와 적정 체중여부에 대한 빈도 표를 만들어라

bmi 계산 - Bmi = 몸무게(kg)/(키(m)**2)

만나이 구하기 - 건강검진을 받았던 날을 기준으로 생년월일과 일수 차이가 16년 364일 이하인 경우 만 16세 그 이상의 경우 만 17로 분류하라 - 윤년 등은 고려하지 않는다. 햇수로 16년 + 일수로 364일이 기준이다

적정 체중 여부 (BMI가 아래 구간에 들어올 경우)
17세 남자 : 21.03이상 23.21 미만
17세 여자 : 20.03이상 22.39 미만
16세 남자 : 21.18이상 23.45 미만
16세 여자 : 19.61이상 21.74 미만

#

4-2

4-1에서 구한 적정 체중 여부와 나머지 컬럼(공학여부, 아침식사여부, 일주일운동시간, 채소섭취정도, 수면시간, 성별) 이 독립적인지 통계적으로 확인하라

#

4-3

4-2에서 유의한 변수들만 가지고 적정 체중 여부를 예측하는 모델을 구현하고 성능 평가 및 해석을 하라 (로지스틱회귀 ,xgb)

로지스틱회귀 모델은 오즈비를 구하라 xgb의 경우 각 피쳐중요도를 확인하고 예측에 영향을 가장 미치는 변수를 확인하라

#

4-4

4-3 두 모델의 roc-auc 그래프를 하나의 그래프에 겹쳐 그려라

#

5

평균이 𝜃이고 분산이 100인 정규분포의 사전분포가 100, 256일때 120의 값을 가지는 데이터가 있을 경우 사후평균은?

#

데이터 설명

6-1

회귀 모델링 후 유의하지 않는변수 파악

#

6-2

변수 선택시 먼저 제거 될 변수 및 근거 제시

#

6-3

VIF를 통한 다중공선성 진단

#

7

import pandas as pd
df =pd.read_csv('https://raw.githubusercontent.com/Datamanim/datarepo/main/adp/31/adp_31_7.csv',index_col = 0)
df
A B C D E
contract_1 1 0 1 1 1
contract_2 0 1 0 1 0
contract_3 1 0 0 0 0
contract_4 0 1 1 1 1
contract_5 0 1 0 1 0
contract_6 1 1 0 1 1
contract_7 0 1 1 0 0
contract_8 0 1 0 0 0
contract_9 1 0 0 1 1
contract_10 1 1 0 0 0
contract_11 1 0 0 1 0
contract_12 1 1 1 0 0
#

8

유기견이 하루에 2.2마리 발생한다.

8-1

한마리도 한 버려질 확률

#

8-2

적어도 2마리가 버려질 확률

#