728x90
저번 포스팅에서 언급했던 결측치 문제를 오늘 해결했습니다. 결과만 보면 이렇게 간단한데 그 과정을 알기까지가 힘드네요. 아래가 해결한 코드입니다.
def nan_fill(dataset):
#결측치가 있는 컬럼
nan_columns = [col for col in dataset.iloc[:,2:-1].columns.to_list() if col!='hour_bef_precipitation']
#for 문을 통해 결측치를 각 시간대별 평균값으로 대체
for col in nan_columns:
hour_mean_value = dataset.groupby('hour').mean()[col]
hour_mean_value.fillna(hour_mean_value.mean(),inplace=True) #회귀를 통해서 값 채우기 시도
for nan_hour in dataset[dataset[col].isna()]['hour'].unique():
#nan index 구하기
index= dataset[dataset[col].isna()].loc[dataset['hour']==nan_hour,col].index
#채우기
for idx in index:
dataset.loc[idx, col] = hour_mean_value[nan_hour]
#hour_bef_precipitation 결측치 삭제
dataset.dropna(inplace=True)
print(dataset.isna().sum())
return dataset
train = nan_fill(train)
test= nan_fill(test)
id 0
hour 0
hour_bef_temperature 0
hour_bef_precipitation 0
hour_bef_windspeed 0
hour_bef_humidity 0
hour_bef_visibility 0
hour_bef_ozone 0
hour_bef_pm10 0
hour_bef_pm2.5 0
count 0
dtype: int64
id 0
hour 0
hour_bef_temperature 0
hour_bef_precipitation 0
hour_bef_windspeed 0
hour_bef_humidity 0
hour_bef_visibility 0
hour_bef_ozone 0
hour_bef_pm10 0
hour_bef_pm2.5 0
위 함수를 통해 각 시간별 평균값을 대체값으로 활용할수 있었습니다.
VIF를 통해 다중공선성을 확인해 봤습니다.
한 시간전 온도가 다중공선성이 있는 걸로 계산 되었습니다. 온도가 타켓변수와 상관성이 높게 나왔기 때문에 무작정 제거 하기 보다는 상관성과 모델링 비교를 통해서 결정해야 할것같습니다.
다음시간에는 FE에 대해 좀더 색다른 방법은 없는지 조사해 보면서 진도 나갈것같습니다.
728x90
'Data Diary' 카테고리의 다른 글
2021-09-09(따릉이 프로젝트 완성하기 4) (0) | 2021.09.09 |
---|---|
2021-09-08(딥러닝 수학 13_ for Several Samples Theory & Implementation) (0) | 2021.09.08 |
2021-09-02,04(따릉이 프로젝트 완성하기 1,2) (0) | 2021.09.04 |
2021-08-26(딥러닝 수학 12_mini batch & for one sample-Theory) (0) | 2021.08.26 |
2021-08-24(딥러닝 수학11_Cost function & Feature Scaling) (0) | 2021.08.24 |