TIL 85일차 : One-Day 로지스틱회귀모델 훈련 프로젝트

2024. 3. 14. 02:15회고/TIL(매일)

 

✏️도전한 점


1. 웹 크롤링을 통한 알라딘 월간 베스트셀러 top500 데이터 수집 : 하루 안에 끝낸다!

2. CSV 파일을 통한 데이터 수집

3. 데이터 전처리

4. 수치형 데이터 변환

5. 범주형 데이터 변환

6. 다중 로지스틱회귀 실습

 

01 데이터셋 제작


 

문제 1. 코드는 어렵지 않았으나 데이터를 수집했는데 패턴이 일정하지 않았던 점.

-> 해결 방법 1. 전체를 크롤링 하여 문자열을 split하려고 시도했다. -> CSV이 더 분리가 잘 됨.

-> 해결 방법 2. 결측 데이터는 상세 페이지로 수집하려고 시도했다.

 

문제 2. 상세 페이지조차 패턴이 일정하지 않았던 점.

-> 리뷰 수라도 건지려고 했으나 일단 CSV 파일로 데이터셋을 만들고자 한다.

-> 대신 과정에서 찾아보다가 .back()이라는 코드를 배울 수 있었던 점이 좋았다.

 

해결: 아래와 같이 데이터셋을 새롭게 만들었고 불필요한 컬럼은 제거했다.

 

 

목적: 100위 안에 든 책을 인기 도서의 기준으로 잡고, 다음 달에 '1'로 부여될 수 있는지 예측하고자 함. 새롭게 베스트셀러 top100에 들 책을 알아보고 결과 데이터를 바탕으로 다양한 비즈니스 데이터로 활용한다.

-> 100위 안에 든 베스트 셀러는 Y='1'로, 100위 밖은 Y='0'으로 부여한 분류 컬럼을 제작하였다.

 

02 데이터 전처리


[데이터 전처리 과정]

- 3.3년치 1년씩 크롤링 but 결측치가 너무 많아서 일단 보류한다.
- 3.3년치 1000개의 베스트셀러 top 1000 데이터를 수집하다.
- xls형식이 에러나서 csv로 변경하고 파이썬으로 작업한다.
- 'monthly_ranking'을 부여하고, 100위='1', 그외='0'컬럼 부여해서 concat
- null값을 '정보없음'으로 바꾸고 'replace'로 해당 값을 부여한다.
- price에 콤마를 떼고 자료타입을 'int'로 변경한다. (메서드 체이닝)
- 출간일자를 datetime형으로 변경한다. but float자료형 ex)20240101.0 날짜데이터는 바로 바꾸면 오류난다.
- 메서드 체이닝으로 float>int>str>datetime형으로 변환했다. (%Y%m%d하면 자동으로 자릿수를 맞춰준다.)

- 검색할 때 불리언식의 반대는 '~'로 표현할 수 있다.

 

[메서드 체이닝]

all_aladin_zero['price'] = all_aladin_zero['price'].str.replace(',','').astype(int)
all_aladin_zero['author'] = all_aladin_zero['author'].str.split('지음').str[0]
all_aladin_zero[~all_aladin_zero['category'].str.contains('수험서')]

 

 

1. TOP5에 해당하는 분야의 책은 '1', 그외는 '0'으로 분류하였다.

2. 수집 취지에 맞지 않는 학습 만화, 만화, 수험서는 제외하였다.

 

03 데이터 변환


 

04 머신러닝 모델 훈련


내가 이용한 모델은 다중 로지스틱회귀 모델로 신규도서에 대한 가격, 판매지수, 베스트셀러 유무, 인기 카테고리 유무, 현재를 기준으로 지난 출간일수를 입력하면 다음 달의 순위를 예측하는 모델을 제작하여 결과를 도출하였다. 정확도는 0.783638이고 f1-score는 0.452316으로 정확도에 비해 f1-score가 현저하게 낮은 것으로 보아 좋은 모델은 아니라고 판단했다. 변수의 다양성이 부족했고 날짜 데이터 전처리 중에 문제가 생겨서 보류했던 점이 컸던 것 같다. 날짜 데이터의 문제를 파악하고 다시 도전해보도록 한다.

 

05 문제점


 

문제 1. 데이터마다 리스트 형태로 데이터들이 묶여 있는데 인덱스를 찾지 못하는 문제가 발생했다.

문제 2. 날짜 데이터형으로 변환하고 csv로 저장하면 문자열로 돌아오는 문제를 해결하고 싶다.