판매 예측 AI로 소매업체 수익 최적화

게시 됨: 2022-03-11

예측은 과거 데이터와 이벤트를 사용하여 미래 추세, 잠재적 재해 및 모든 주제의 전반적인 행동에 대한 추정치를 작성하는 기술입니다. 예측은 비용, 수익 및 예산 계획을 추정하기 위해 의사 결정 분석을 위한 확률적 지원으로 사용될 수 있습니다.

비즈니스 예측은 정성적 예측정량적 예측 의 두 가지 범주로 나눌 수 있습니다.

  • 정성적 예측. 정성적 예측은 시장 조사 및 시장 전략과 관련이 있으므로 보다 전문가 중심적이며 인적 요소의 영향을 받습니다. 일반적으로 단기 전략 수립을 목표로 합니다.
  • 양적 예측. 정량적 예측은 인적 요소를 배제합니다. 이는 기업이 보유하고 있는 과거 데이터에만 의존하며 판매, 가격 및 기타 재무적 측면과 같은 일부 요소가 장기적으로 어떻게 될 것인지 예측하는 것을 목표로 합니다.

자세한 내용은 Investopedia의 재무 예측 입문서를 참조하십시오.

두 가지 유형의 예측 모두 많은 가능성을 보여주었고 많은 기업에 대한 비즈니스 향상을 만들어냈습니다.

예측이 시장 결정에 어떻게 영향을 미칠 수 있는지 자세히 알아보려면 먼저 예측 시장: Stefan Luckner et al.의 기초, 설계 및 응용 프로그램 을 시작하는 것이 좋습니다.

정량적 예측을 사용하여 해결할 수 있는 한 가지 문제는 수요 예측 또는 판매 예측입니다.

수요예측과 판매예측 접근법

많은 매장을 운영하는 소매업체이고 각 매장에는 계절 및 시장 동향과 같은 특정 이벤트를 기반으로 하는 인간의 결정에 기반한 정적 제품 재고 보충 시스템이 있다고 가정합니다.

때때로 두 가지 주요 문제로 이어질 수 있는 다음 문제 중 하나에 직면하게 됩니다.

  • 재고 과잉 제품. 일정 기간 동안 판매할 계획이었으나 판매되지 않은 상당한 양의 제품을 보유하고 있습니다.
  • 품절된 제품입니다. 제품을 판매할 수 있는 기회가 있지만 제품을 구할 수 없어서 판매할 수 없는 경우.

IHL 그룹이 600 가구 및 소매업체를 대상으로 실시한 설문조사에 따르면 소매업체는 재고 부족 문제로 인해 매년 거의 1조 달러의 매출 손실을 보고 있습니다.

“Retail Dive에 이메일로 보낸 보고서에 따르면 쇼핑객은 쇼핑 3번 중 1번에서 재고 부족을 경험합니다. 식품, 약품, 대량 판매점에서는 5회 중 1회, 백화점과 전문점에서는 4회 중 1회, 전자제품 매장에서는 3회 중 1회에서 품절 상품을 접하게 됩니다.”라고 IHL 그룹은 밝혔습니다.

보이는 바와 같이, 이 두 가지 문제는 모두 판매 가능성을 상실했거나 판매되지 않은 제품에 더 많은 돈을 투자했기 때문에 수익 감소로 이어집니다.

이는 기업의 현금 흐름에 분명히 해를 끼치며 이 위험을 해결하려면 다음 두 가지가 필요합니다.

  • 결정을 내리는 데 도움이 되는 추가 정보
  • 보충 시스템에 대한 장기 전략 기획을 할 수 있는 예측팀

따라서 질문은 다음과 같습니다. 예측 프로세스를 돕기 위해 회사에서 AI를 채택해야 한다는 징후는 무엇입니까?

이러한 결정을 내리려면 다음 질문에 대한 전문가의 답변이 필요합니다.

  • 판매 파이프라인을 예측하는 것이 어렵습니까?
  • 판매 예측이 정확하지 않거나 충분히 정확하지 않습니까(이력 데이터가 있더라도)?
  • 품절 또는 재고 과잉 문제로 고통 받고 있습니까?
  • 의사 결정과 계획을 추진하기 위해 보유한 데이터에서 기술적이고 추론적인 통찰력을 추출할 수 없습니까?

이러한 질문에 대한 답은 예측 전략에 AI를 적용할지 여부를 결정하는 데 도움이 되는 명확한 신호여야 합니다.

AI가 판매 예측 프로세스에 어떤 이점을 줄 수 있습니까?

AI는 많은 회사에서 인간의 예측을 능가하는 뛰어난 결과를 보여주었고 더 빠른 의사 결정 및 계획은 물론 더 안정적인 위험 관리 전략을 가능하게 했습니다. 이것이 최고의 기업이 계획에 AI를 채택하는 이유입니다.

수요 예측 문제를 다룰 때 시계열 예측 방법을 사용하여 각 제품의 매출을 예측할 수 있으므로 기업은 재고 보충을 최적화하고 앞서 언급한 문제의 발생을 최소화할 수 있습니다. 그러나 많은 모델은 필요한 기능이 부족하기 때문에 개별 제품 수준 또는 제품 범주 수준에서 예측하는 데 어려움을 겪고 있습니다. 따라서 질문은 다음과 같습니다. 어떻게 작동하게 하고 데이터를 최대한 활용할 수 있습니까?

실제 소매업체의 경우 이러한 문제는 사소한 것이 아닙니다. 데이터 세트 및 다변수 종속성에 많은 비선형성을 도입하는 1,000개 이상의 제품이 있거나, 제품을 생산하거나 구매할 수 있으려면 많은 사전 통지와 함께 예상 재고 보충량에 대해 경고를 받아야 합니다. 수요가 구체화될 때까지 그것을 얻기 위해 필요한 모든 일을 하십시오.

이 경우 ARIMA 및 ETS와 같은 기존 모델은 작동하지 않으며 RNN 및 XGBoost와 같은 보다 강력한 방법이 필요하며 이것이 이 문제를 해결하기 위해 많은 기능 생성이 필요한 이유입니다.

이것이 작동하려면 다음이 필요합니다.

  • 제품의 다양성과 다양성을 설명하는 데 필요한 필수 입력 기능을 습득합니다.
  • 데이터를 분류하여 각 범주가 동일한 시계열 동작을 하도록 하고 각 범주는 독립 실행형 모델을 사용하여 처리됩니다.
  • 획득한 분류된 입력 기능에 대해 모델을 훈련시킵니다.

이 기사를 위해 XGBoost를 그러한 모델의 예로 들 것입니다.

판매 예측 모델의 필수 기능

이 문제에 필요한 기능 세트는 네 가지 주요 그룹으로 분류됩니다.

  • 시간 관련 기능
  • 판매 관련 기능
  • 가격 관련 기능
  • 주식 관련 기능

시간 관련 기능

딥 러닝(Recurrent Neural Network)과 달리 기계 학습 모델은 날짜/시간 기능에 대한 수동 기능 추출 계층을 생성하지 않고는 시계열 내에서 장기 또는 단기 종속성을 얻을 수 없습니다.

다음과 같은 많은 기능을 날짜에서 추출할 수 있습니다.

  • 년도
  • 주말 또는 평일(요일이 평일인지 주말인지)
  • 평일

많은 접근 방식은 이러한 시간 특성을 추출하고 입력으로 사용하고 모델을 훈련하지만 추가 엔지니어링을 수행할 수 있습니다. 우리가 볼 수 있듯이 기능(요일, 시간, 요일)은 주기적이며 반복적인 값의 범위를 가집니다. 모델은 이것을 어떻게 처리할 수 있습니까?

짧은 대답은 모델이 보는 시간 00:00이 23:00에서 23시간 떨어져 있기 때문에 할 수 없지만 실제로는 1시간 떨어져 있기 때문입니다. 이를 해결하는 한 가지 방법은 이러한 기능을 순환 변환으로 변환하는 것입니다.

시간 관련 기능

사인과 코사인의 개념 또는 벡터 표현을 사용하여 매 시간(24시간)을 각도로 변환할 수 있으며, 사인과 코사인을 사용하면 모델이 시간에 관계없이 시간 사이의 실제 비율을 훨씬 쉽게 감지할 수 있습니다. 주기성의.

이렇게 하면 주기적 시간 기능 또는 모든 주기적 기능에서 발생하는 불연속성이 제거됩니다.

이 기사에서는 공개적으로 발견된 Sample Superstore 데이터 세트를 사용하고 특정 제품 범주에 대한 목표 월별 매출을 예측하려고 합니다.

또한 다음 라이브러리와 함께 Python 3.7 환경을 사용합니다.

  • 넘파이
  • 판다
  • XGBoost
  • 스클런

이제 마침표 변환 기능을 빌드하고 도움이 되었는지 테스트하는 방법을 알려 드리겠습니다.

 def convert_periodic(val,period): theta = 2*np.pi*val/period sin_period = np.sin(theta) cos_period = np.cos(theta) return sin_period,cos_period def convert_month(x): return convert_periodic(x,12) df['sin_month'], df['cos_month'] = zip(*df['month'].map(convert_month))

이를 통해 추가된 기능이 성능을 향상시킬지 여부를 테스트할 준비가 되었습니다.

 X = df.drop(['Order Date','Sales','sin_month', 'cos_month'],axis = 1) y = np.log1p(df['Sales']) X_train,X_test,y_train,y_test = train_test_split(X,y,test_size = 0.2, shuffle=False)

볼 수 있듯이 대상 판매 기능에 대해 로그 1p 변환을 수행했습니다. 왜냐하면 이것이 편향된 기능(정규 분포가 아님)이기 때문입니다.

이제 데이터에 XGBoost 회귀자를 맞춥니다.

 y_pred = model.predict(X_test) print(f'Loss without cyclic conversion on testing set is {sqrt(mean_squared_error(y_pred,y_test))}') Loss without cyclic conversion on testing set is 0.4313676193485837

다음으로 생성된 기능을 사용해 보겠습니다.

 X = df.drop(['Order Date','Sales'],axis = 1) y = np.log1p(df['Sales']) X_train,X_test,y_train,y_test = train_test_split(X,y,test_size = 0.2, shuffle=False) y_pred = model.predict(X_test) print(f'Loss with cyclic conversion on testing set is {sqrt(mean_squared_error(y_pred,y_test))}') Loss with cyclic conversion on testing set is 0.33868030449130826

보시다시피 손실은 0.43RMSE에서 0.33RMSE로 향상되었습니다.

문제에 따라 생각할 수 있는 다른 시간 관련 기능은 다음과 같습니다.

  • 아이템이 매장에 들어온 후의 개월 수
  • 마지막 판매 이후 일 수

판매 관련 기능

이것은 판매를 예측하는 데 필요한 주요 핵심 입력 기능입니다. 판매 데이터를 최대한 활용하는 방법은 무엇입니까? 지연 및 자기 상관의 개념을 사용하여 이를 달성할 수 있습니다.

지연 기능은 제품의 과거 판매 기록입니다. 예를 들어, 2020년 5월 판매를 예측하기 위해 월별 판매에 대한 12-lag 특성을 입력으로 사용했다면 2019년 5월과 2020년 4월 사이의 데이터 레코드를 모델에 제공한다는 의미입니다. 이는 정말 도움이 될 수 있습니다.

또한 자기 상관 플롯을 사용하여 대상 기능이 지연된 기능과 얼마나 상관 관계가 있는지 확인하기 위해 해석할 수 있습니다. 또한 지연된 기능 중에서 상관 관계가 있는 기능만 선택하는 데 도움이 되므로 메모리 사용량과 기능 중복성을 줄입니다.

데이터 프레임에 지연 기능을 추가하는 방법은 다음과 같습니다.

 for i in range(3): df[f'lag_{i+1}'] = df['Sales'].shift(i+1) df = df.dropna() df.head() 

판매 관련 기능

여기에서 훈련 세트에 포함할 3-lag 기능의 값을 선택했습니다. 이 기능은 초매개변수입니다. 자기 상관 플롯을 기반으로 하거나 많은 값을 시도하고 조정 단계에서 가장 좋은 것을 선택하여 선택할 수 있습니다.

 X = df.drop(['Order Date','Sales'],axis = 1) y = np.log1p(df['Sales']) X_train,X_test,y_train,y_test = train_test_split(X,y,test_size = 0.2, shuffle=False) y_pred = model.predict(X_test) print(f'Loss with lag features on testing set is {sqrt(mean_squared_error(y_pred,y_test))}') Loss with lag and aggregated sales features on testing set is 0.2862175857169188

이제 RMSE는 지연 기능과 순환 변환을 모두 사용하여 0.28로 향상되었습니다.

추가할 수 있는 몇 가지 추가 판매 관련 기능:

  • 판매된 품목 비율(매장에서 판매된 총 판매액 중 판매된 품목의 비율)
  • 항목 범주에 대한 판매 이벤트 빈도
  • 연공서열 개념 추가

연공서열 은 상점의 새 항목에 연공서열 수준을 할당하기 위해 도입된 개념입니다.

  • 연공서 0: 회사에 새로운 항목
  • 연공 1: 이 매장에서는 판매한 적이 없지만 회사의 다른 매장에서는 판매되는 품목
  • 선임 2: 이전에 이 상점에서 판매된 품목

가격 관련 기능

단순한 주장은 매출 상승과 하락의 직접적인 원인 중 하나가 가격과 판촉이라는 것이다. 가격은 제품의 다양한 범주, 하위 범주 및 상위 범주를 구별하는 가장 좋은 방법 중 하나입니다.

예를 들어 카테고리와 하위 카테고리가 각 제품에 할당되었다고 가정하면 다음과 같은 가격 기능을 생성할 수 있습니다.

  • (평균, 최대, 최소, 중앙값) 카테고리별 가격
  • 하위 범주에 걸친 (평균, 최대, 최소, 중앙값) 가격
  • 범주 및 하위 범주의 각 통계 간의 차이와 같은 해당 통계 간의 비교

이 집계는 다음과 같이 주제별로 여러 그룹화를 사용하여 여러 번 수행할 수 있습니다(월별 수요 예측을 목표로 한다고 가정).

  • 월간, 매장, 카테고리
  • 월간, 매장, 하위 카테고리
  • 월간, 매장, 아이템, 카테고리
  • 월간, 매장, 품목, 하위 카테고리

또한 월간 그룹화를 제외하고 더 많은 기능을 추가하여 전반적인 가격 행동을 연구할 수 있습니다.

주식 관련 기능

이것은 소매업체와 판매 예측가 사이에서 그리 일반적이지는 않지만 판매 예측 모델에서 많은 차이를 만듭니다. 재고 데이터 세트는 주로 각 상점의 매일 각 제품의 재고 데이터를 가지고 있습니다. 이를 통해 판매 데이터와 결합하여 각 제품의 월별 회전율을 얻을 수 있습니다. 이 비율은 제품 재고가 얼마나 빨리 완전히 팔리는지를 나타내며 두 ​​가지 주요 이점이 있습니다.

  • 모델이 현재 재고 수준을 기반으로 판매를 예측하는 데 도움이 될 수 있습니다.
  • 이 값을 사용하여 제품을 저속, 중간 및 고속 제품으로 클러스터링하는 데 도움이 될 수 있습니다. 이 클러스터링은 의사 결정 및 모델링에 도움이 됩니다.

이를 위해서는 판매 데이터와 함께 상품별 일일 재고 데이터가 필요하며, 다음과 같이 재고 회전율을 계산할 수 있습니다.

주식 관련 기능

힌트: 이러한 집계는 시간 범위를 기반으로 수행됩니다. 예를 들어, 월별 매출을 예측하는 경우 ITO는 같은 달의 평균 재고 가치에 대한 지난 달의 총 매출로 계산됩니다.

판매 예측은 데이터를 기회로 바꿀 수 있습니다

요약하면, 매출 예측은 기업이 올바른 데이터 파이프라인을 갖고 올바른 기능 엔지니어링 방법을 사용하는 경우 수익을 늘리고 이익을 창출하는 데 도움이 될 수 있습니다. 이 기사는 모든 종류의 데이터가 이 문제를 해결하는 데 유용할 수 있음을 보여주기 위한 시도였습니다.

모든 기업은 예측 문제에 AI가 필요한지 여부를 조사해야 하며, 그럴 경우 전문 AI 엔지니어와 머신 러닝 엔지니어의 조언이 필요하여 자체 판매 예측 시스템을 구축해야 합니다.

이 판매 예측 기법을 기꺼이 적용하려는 회사/소매업체라면 가능한 모든 데이터, 특히 일일 판매, 일일 재고 및 일일 거래를 수집하는 것으로 시작하십시오.

일단 이 데이터를 소유하면 수익을 늘리고 재고 보충 전략을 최적화하여 위의 몇 가지 예와 주요 소매업체에서 사용하는 판매 예측 사례에서 볼 수 있듯이 사용 가능한 리소스로 비즈니스에서 가능한 한 최고의 수익을 올릴 수 있습니다. .

참조:

데이터세트
재무 예측에 대한 추가 읽기