[프로젝트 2 - 정형 데이터 분류] 4. 피쳐 엔지니어링

Jade·2021년 4월 16일
0

부스트캠프 AI Tech

목록 보기
42/54

프로젝트 2 - 피쳐 엔지니어링


피쳐 엔지니어링
도메인 지식을 바탕으로, 원본 데이터로부터 문제 해결에 도움이 되는 피쳐를 생성/변환하고 이를 머신러닝 모델에 적합한 형식으로 변환하는 작업

주어진 데이터는 2009년 12월부터 2011년 11월까지의 구매 데이터다. 12월의 구매를 예측해야 하는데, 모델을 학습시키려면 레이블이 필요하다. 2011년 11월 데이터를 레이블로 삼고 2011년 10월까지의 데이터를 학습 용도로 사용한다.

+pandas Group By Aggregation
customer id를 기준으로 groupby 객체(특정 열 기준으로 같은 값을 가진 샘플들을 그룹으로 묶어 줌) 를 만들어서 mean, max, sum, count, std, skew(치우친 정도, 음수면 왼쪽으로 쏠렸고 양수면 오른쪽으로 쏠렸다) 등의 통계량을 집계(aggregation)한다.
이거 엄청 강력하네... 일일이 코드짜야했나 싶었는데

피쳐들의 의미:
total-sum(과거 구매액의 총합)
quantity-sum(과거 고객이 구매한 상품 수의 총합)
price-sum(과거 고객이 주문한 상품 1개당 가격의 총합)

total-count(과거 고객의 주문 횟수)
quantity-count
price-count
total, quantity, price는 주문 1회당 1번 발생하는 거라서 얘네들의 횟수 정보는 중복된 피쳐다.

total-mean(주문 금액의 평균)
quantity-mean(과거 고객이 한 번에 주문한 상품 수의 평균)
price-mean(과거 고객이 주문한 상품 1개당 평균 가격)

total-min(과거 구매액 중 최소값)
quantity-min(과거 고객이 한 번에 주문한 상품 수 중 최소값) 주의할 점:환불상품때문에 음수값이 있다
price-min(과거 고객이 주문한 상품 1개당 가격의 최소값)

total-max(과거 구매액 중 최대값)
quantity-max(과거 고객이 한 번에 주문한 상품 수 중 최대값)
price-max(과거 고객이 주문한 상품 1개당 가격 중 최대값)

total-std(과거 구매액의 표준편차)
quantity-std(과거 고객이 한 번에 주문한 상품 수의 표준편차)
price-std(과거 고객이 주문한 상품 1개당 가격의 표준편차)

total-skew(과거 구매액이 어느 쪽으로 쏠려 있는가)
quantity-skew(과거 고객이 한 번에 주문한 상품 수가 어느 쪽으로 쏠려 있는가)
price-skew(과거 고객이 주문한 상품 1개당 가격이 어느 쪽으로 쏠려 있는가)


LightGBM Early stopping
validation 성능을 측정하면서 val 성능이 가장 좋은 하이퍼파라미터에서 학습을 조기 종료하는 방법. LightGBM에서 n_estimators 하이퍼파라미터를 통해 만들 트리 갯수를 설정하는데, 이게 최적의 값이 아닐 수도 있다. 검증 데이터가 있을 경우에는 이 하이퍼파라미터를 충분히 크게 설정하고 early_stopping_round를 적당한 값으로 설정해서 early stopping을 할 수 있다. 트리를 추가할 때마다 val 성능을 측정하고, early_stopping_round회 반복하는 동안 성능이 좋아지지 않으면 더 이상 트리를 만들지 않고 가장 val 성능이 좋은 트리 갯수로 모델을 확정한다.


새로운 피쳐 생성
원본 데이터에 주어진 피쳐에다가 고객id, 상품id, 주문id 기반으로 pandas의 groupby 누적합(cumsum)을 적용해 새 피쳐 생성...하는데 누적합이 의미가?

profile
반가워용

0개의 댓글