<TIL> 2024-02-08
- 오늘 진행한 일
- 팀 프로젝트 1차 튜터링
- 팀 프로젝트 데이터 전처리
오늘은 어제 한 EDA와 전처리를 하다가 생긴 궁금증을 가지고 튜터님께 질문을 드리러갔다.
질문 드린 내용은 아래와 같다.
- 데이터 보간에 있어서 ml데이터를 최빈값인 750으로 보간하고자 하는데 이렇게 하면 750인 데이터가 전체의 97.4퍼센트가 된다. 이러면 예측력에 영향이 적을 거 같은데 데이터를 사용하지 않는 편이 더 나은가
- 레이블 갯수가 너무 많은 범주형 데이터의 경우 기준치 이하의 행 수를 가지는 데이터에 대해 “기타”로 묶어도 되는가
- 변수상관성이 0.79인 데이터에 대해서 변수선택을 해주는게 좋은가
- 범주형 변수 결측치 보간 시 MICE 방법을 이용하려고 하는데 문제가 없겠는가 아니면 머신러닝 방법이 더 나은가
질문에 대한 답변은
- 예측력에 도움은 좀 덜 될 수 있으나 데이터를 사용하지 않는 것보다는 사용하는 것이 더 낫다.
- 레이블을 묶어버리기보다 다른 전처리를 고민해보는 것이 좋을 수도 있고, 활용하기 어려운데이터라면 삭제도 가능하다.
- 회귀모델이라면 하나를 삭제하거나 PCA를 해보는 것도 고민해볼만한 문제겠지만 머신러닝 모델기법들을 사용하는데 있어서 상관이 높은 변수가 크게 영향을 미치지는 않을 것 같아서 둘 다 사용해도 될 듯하다.
- MICE가 범주형 변수 변환을 지원해주는건 맞지만 그래도 수치형으로 바꾼 뒤에 하는 과정이 있기 때문에 머신러닝 분류 알고리즘을 사용하는 방법으로 범주형 변수를 보간하는게 더 합리적이라고 생각한다.
이렇게 받았다.
추가로 국가와 와인 생산지역에 대한 변수를 어떻게 할지에 대해서 고민이 좀 있었는데 그 부분에 대해서는 위 경도라는 아이디어를 제시해주셨다. 다행히 대학원 생활 때 구글 지오코딩에 대해서 다뤄본 적이 있었기 때문에 이 부분은 어렵지 않게 구현할 수 있었다.
https://jinhyunbae.tistory.com/151
<TIL> 2024-02-07
오늘 진행한 일 팀 프로젝트 데이터 탐색적 분석 팀 프로젝트 데이터 전처리 및 튜터링 준비 https://www.kaggle.com/datasets/dev7halo/wine-information Wine Information Wine Information with nation, varieties, flavor, price, et
jinhyunbae.tistory.com
전처리에 대한 내용은 어제 작성한 TIL에서 이어진다.
wine['prod_place'] = np.NaN
for i in range(wine.shape[0]) :
place = ''
# nation 검사
if pd.isna(wine['nation'][i]) :
continue
else :
place = place + wine['nation'][i]
# local1 검사
if pd.isna(wine['local1'][i]) :
wine['prod_place'][i] = place
continue
else :
place = place + ', ' + wine['local1'][i]
wine['prod_place'][i] = place
wine.head()
nation과 local 1까지를 더한 값을 주소로 만드는 코드를 작성한 뒤 이를
미리 만들어놓은 지오코딩 클래스를 불러와서 함수에 API key와 주소를 넣어주어
모든 행에 대해서 주소를 검사하면서 위 경도를 받아오는 코드를 작성하였다.
wine['prod_lat'] = np.NaN
wine['prod_lng'] = np.NaN
error_row = []
for i in range(wine.shape[0]) :
try:
print(f'{i}번째 행을 시도 중입니다.')
if pd.isna(wine['prod_place'][i]) :
continue
else :
lat, lng = get_address_result_data(key, wine['prod_place'][i])
wine['prod_lat'][i] = lat
wine['prod_lng'][i] = lng
except :
print(f'---{i}번째 행을 시도하다 문제가 발생했습니다.---')
error_row.append(i)
그 결과 주소에 대응하는 위 경도의 값을 얻을 수 있었다. local 데이터가 정확하지 않아서 포도 품종이 섞여있는 경우도 있었으나 구글 지오코딩에서 이 경우 앞단인 나라까지만 읽고 나라의 위경도를 반환해주어서 수월하게 전처리가 가능했다.
다음주는 이제 본격적으로 머신러닝을 통한 결측치 보간을 진행하여 모델링하는 과정으로 넘어가려고한다.
연휴 동안에도 혼자 데이터 이리저리 뜯어볼 예정이다.
다음주도 화이팅