ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • <TIL> 2024-02-08
    내일배움캠프(데이터 분석 부트캠프 1기)/TIL & WIL 2024. 2. 8. 22:06
    • 오늘 진행한 일 
      • 팀 프로젝트 1차 튜터링
      • 팀 프로젝트 데이터 전처리

    오늘은 어제 한 EDA와 전처리를 하다가 생긴 궁금증을 가지고 튜터님께 질문을 드리러갔다. 

    질문 드린 내용은 아래와 같다. 

     

    1. 데이터 보간에 있어서 ml데이터를 최빈값인 750으로 보간하고자 하는데 이렇게 하면 750인 데이터가 전체의 97.4퍼센트가 된다. 이러면 예측력에 영향이 적을 거 같은데 데이터를 사용하지 않는 편이 더 나은가
    2. 레이블 갯수가 너무 많은 범주형 데이터의 경우 기준치 이하의 행 수를 가지는 데이터에 대해 “기타”로 묶어도 되는가
    3. 변수상관성이 0.79인 데이터에 대해서 변수선택을 해주는게 좋은가
    4. 범주형 변수 결측치 보간 시 MICE 방법을 이용하려고 하는데 문제가 없겠는가 아니면 머신러닝 방법이 더 나은가

    질문에 대한 답변은

    1. 예측력에 도움은 좀 덜 될 수 있으나 데이터를 사용하지 않는 것보다는 사용하는 것이 더 낫다. 
    2. 레이블을 묶어버리기보다 다른 전처리를 고민해보는 것이 좋을 수도 있고, 활용하기 어려운데이터라면 삭제도 가능하다. 
    3. 회귀모델이라면 하나를 삭제하거나 PCA를 해보는 것도 고민해볼만한 문제겠지만 머신러닝 모델기법들을 사용하는데 있어서 상관이 높은 변수가 크게 영향을 미치지는 않을 것 같아서 둘 다 사용해도 될 듯하다. 
    4. 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 데이터가 정확하지 않아서 포도 품종이 섞여있는 경우도 있었으나 구글 지오코딩에서 이 경우 앞단인 나라까지만 읽고 나라의 위경도를 반환해주어서 수월하게 전처리가 가능했다. 


    다음주는 이제 본격적으로 머신러닝을 통한 결측치 보간을 진행하여 모델링하는 과정으로 넘어가려고한다. 

    연휴 동안에도 혼자 데이터 이리저리 뜯어볼 예정이다. 

     

    다음주도 화이팅

    '내일배움캠프(데이터 분석 부트캠프 1기) > TIL & WIL' 카테고리의 다른 글

    <TIL> 2024-02-14  (0) 2024.02.14
    <WIL> 2024년 2월 2주차 회고  (0) 2024.02.08
    <TIL> 2024-02-07  (1) 2024.02.07
    <TIL> 2024-02-06  (0) 2024.02.06
    <TIL> 2024-02-05  (1) 2024.02.06
Designed by Tistory.