• 카테고리

    질문 & 답변
  • 세부 분야

    딥러닝 · 머신러닝

  • 해결 여부

    미해결

분류 모델 학습 차원 질문 드립니다.

22.09.11 15:39 작성 조회수 90

0

안녕하세요. 강의 재밌게 수강하고 있습니다.

분류 모델 학습하기 위해서 학습 데이터의 shape를

어떻게 구성하는게 맞는지 질문드립니다.

예를 들면, 쇼핑몰에서 고객이 상품을 주문 후 해당 상품이 도착예정일에 도착할 수 있을지 없을지에 대해서 예측 한다라고 할때, 학습 데이터를 어떻게 구성해야 맞는지 고민이 되는데요.

아래와 같은 리스트 형태의 데이터가 있다고 하면, 이를 flatten 하게 2차원으로 데이터 프레임으로 구성해야 되는지, 3차원으로 구성해야 하는지가 궁금합니다.

memberId: String

orderHistoryList: List<OrderHistory>

deliveryInfoList: List<Delivery>

 

아래와 같이 2차원으로 flatten 하게 구성하게 되면, 고객마다 list 갯수가 다르기 때문에 3차원으로 구성해서 학습하는게

맞지 않나 싶어서 질문 드립니다.

 

컬럼 : [memberId, OrderHistory1, OrderHistory2.., Deliver1,.., target]

 

혹시 위와 같은 데이터 세트를 가질때 어떻게 학습하는 방향이

맞는지 답변주실 수 있을가요?

 

감사합니다.

답변 1

답변을 작성해보세요.

1

안녕하십니까,

사이킷런의 대부분의 분류/회귀 모델은 2차원 데이터 세트에서만 동작합니다.

그리고 2차원 데이터의 개별 데이터, 즉 row 레벨을 어떤걸로 정할 지가 중요합니다.

즉 고객 레벨로 2차원 데이터를 정한다고 하면

고객성별, 나이와 같이 고객 종속적인 속성은 별 문제가 없지만 고객이 여러번 주문한 주문 관련한 속성은 고객 레벨로 만들기 위해서 평균/총합/최대 등의 group by 연산으로 고객 레벨로 풀어서 만들어 줘야 합니다. 가령 고객별 총 주문건수/평균 주문단가 등 업무 상황에 맞게 데이터를 가공해서 만들어 줘야 합니다.

만약에 고객 레벨이 아니라 주문 레벨로 2차원 데이터를 정한다고 하면 고객 종속적인 속성은 중복해서 row로 만들어 주면 됩니다.

감사합니다.

zcx6263님의 프로필

zcx6263

질문자

2022.09.12

답변 감사합니다!

 

2차원 데이터로 가공해줘야 한다고 이해했습니다.

고객 레벨로 만들기 위해 위의 예시의 주문 정보 리스트 등을 aggregation(주문건수/평균 주문단가)으로 데이터를 가공해야 한다고 이해 했는데,

그럼 고객 레벨로 정의한다고 했을 때, 컬럼을 [order속성1, order속성2...] 등으로 최근 주문 속성 정보 목록 10개로 컬럼을 제한해두고 채워넣은 방식은 유의미한 결과가 나오기 힘들까요?

(고객 레벨에서 최근 주문한 주문 정보들 중에서 도착 예정일에 도착하지 못하는 주문을 예측한다라고 가정했을 때)

(상황과 어떤 데이터이냐에 따라 다르겠지만.. 말씀 주신 aggregation 정보만으로 feature가 부족할 것 같아서 질문 드립니다!)

 

또한, 주문 레벨로 2차원 데이터를 정하고 학습 후 Rest API로 제공했을 때, 입력 값이 고객 레벨로 입력이 들어오고

고객이 주문한 최근 상품 중에 도착 예정일에 도착하지 못하는 상품이 있는지 예측해야 한다고 할때,

각 최근 상품들을 모두 api 호출을 해봐야 하는게 맞는지가 궁금합니다!

 

 

 

 

고객 레벨로 할지, 주문 레벨로 할지는 업무적인 차원에서 결정해 주시면 됩니다.

다만 주문이 제때 도착하는 것과 관련된 속성이 고객 레벨로 만들어지는 속성과는 큰 관련은 없을 것 같습니다만 그것 역시 업무적인 차원에서 판단해 주시면 됩니다.

그런 차원에서 아래 질문에 대해서는

  1. 그럼 고객 레벨로 정의한다고 했을 때, 컬럼을 [order속성1, order속성2...] 등으로 최근 주문 속성 정보 목록 10개로 컬럼을 제한해두고 채워넣은 방식은 유의미한 결과가 나오기 힘들까요?

    => 질문해 주신 내용 만으로 유의미한지 아닌지 제가 판단할 수는 없습니다. 해당 사항은 목표로 하는 업무 로직을 잘 아시는 분과 상의해 보시는게 좋을 것 같습니다.

  2. 또한, 주문 레벨로 2차원 데이터를 정하고 학습 후 Rest API로 제공했을 때, 입력 값이 고객 레벨로 입력이 들어오고 고객이 주문한 최근 상품 중에 도착 예정일에 도착하지 못하는 상품이 있는지 예측해야 한다고 할때, 각 최근 상품들을 모두 api 호출을 해봐야 하는게 맞는지가 궁금합니다!

    => 이것은 질문을 이해하지 못했습니다. 또한, 주문 레벨로 2차원 데이터를 정하고 학습 후 Rest API로 제공했을 때의 의미와 각 최근 상품들을 모두 api 호출을 해봐야 한다는게 어떤 의미인지 잘 모르겠습니다. 보다 상세하게 해당 내용과 프로세스를 기재해 주셨으면 합니다.