新品上线前的销量预估

1、背景说明

随着市场竞争的日益激烈,新品研发和推广成为公司获取市场份额和提升品牌竞争力的关键。新品上线前的销量预估是新品研发及推广环节中的核心步骤,对于制定供应链计划、门店备货以及营销策略至关重要。通过数据分析技术,我们可以建立科学的销量预测模型,为新品上线提供有效的决策支持。

2、数据收集与整理

options(warn = -1)

# 加载包
library(RPostgres)
suppressPackageStartupMessages(library(dplyr))    


# 建立连接函数
init_psql <- function(dbname = "tastien_hologres_prod") {
    con <- dbConnect(RPostgres::Postgres(), 
                     dbname = dbname, 
                     host = "hgprecn-cn-lbj3s3j7x002-cn-shanghai-vpc-st.hologres.aliyuncs.com", 
                     port = 80, 
                     user = "BASIC$admin_qbi",
                     password = "mrP%GMRw@Ym"
    )
    return(con) 
}

# 执行函数并获取连接对象
con <- init_psql() 


# 执行查询
result <- dbGetQuery(con, "
select 
        case TO_CHAR(TO_DATE(cur_date,'YYYY-MM-DD'), 'D')::int
        when 1 then '周日' 
        when 2 then '周一' 
        when 3 then '周二' 
        when 4 then '周三' 
        when 5 then '周四' 
        when 6 then '周五' 
        when 7 then '周六' 
        else '其他'
        end as week
        ,TO_DATE(cur_date, 'YYYY-MM-DD')   as cur_date
        ,shop_id  
        ,sku_id 
        ,sku_id_name 
        ,category_id 
        ,category_id_name 
        ,base_amt_sku/sale_cnt_sku as base_amt_sku
        ,sale_cnt_sku ::NUMERIC
        ,(COALESCE(sale_cnt_sku_elm_wm,0) + COALESCE(sale_cnt_sku_mt_wm,0)  +   COALESCE(sale_cnt_sku_ingce_tatada,0)) as sale_cnt_sku_wm
        ,COALESCE(sale_cnt_sku_ingce,0) - COALESCE(sale_cnt_sku_ingce_tatada,0) as sale_cnt_sku_dd 
    from dm.dm_sku_label_all
    where 
        in_check = 1
        and sale_cnt_sku>0
        and category_id_name='中国汉堡';")

# 查看查询结果
# print(result)
result_10 <- head(result, 10)
print(result_10)
   week   cur_date shop_id sku_id          sku_id_name category_id
1  周一 2024-08-05    M911  67757     醋香里脊中国汉堡         135
2  周一 2024-08-05    M987  67757     醋香里脊中国汉堡         135
3  周一 2024-08-05    T450  67757     醋香里脊中国汉堡         135
4  周一 2024-08-05   TE101  67757     醋香里脊中国汉堡         135
5  周一 2024-08-05    M296  67757     醋香里脊中国汉堡         135
6  周一 2024-08-05  MA0116  67757     醋香里脊中国汉堡         135
7  周一 2024-08-05    T973  67757     醋香里脊中国汉堡         135
8  周一 2024-08-05  TA0097  67757     醋香里脊中国汉堡         135
9  周一 2024-08-05   ME692  67757     醋香里脊中国汉堡         135
10 周五 2024-09-27  MA0116  69521 避风塘蟹味柳中国汉堡         135
   category_id_name base_amt_sku sale_cnt_sku sale_cnt_sku_wm sale_cnt_sku_dd
1          中国汉堡           16           60              32              28
2          中国汉堡           16           77              34              43
3          中国汉堡           16           69              36              33
4          中国汉堡           16           82              40              42
5          中国汉堡           16           47              11              36
6          中国汉堡           16           58              22              36
7          中国汉堡           16           17               8               9
8          中国汉堡           16           66              39              27
9          中国汉堡           16           73              29              44
10         中国汉堡           17           13               6               7
# 完成后断开连接
dbDisconnect(con)

3、数据探索分析

# 查看数据的基本情况
summary(result)
     week              cur_date            shop_id             sku_id         
 Length:300792      Min.   :2024-08-05   Length:300792      Length:300792     
 Class :character   1st Qu.:2024-08-15   Class :character   Class :character  
 Mode  :character   Median :2024-09-20   Mode  :character   Mode  :character  
                    Mean   :2024-09-23                                        
                    3rd Qu.:2024-10-26                                        
                    Max.   :2024-11-21                                        
 sku_id_name        category_id        category_id_name    base_amt_sku  
 Length:300792      Length:300792      Length:300792      Min.   :16.00  
 Class :character   Class :character   Class :character   1st Qu.:16.00  
 Mode  :character   Mode  :character   Mode  :character   Median :17.00  
                                                          Mean   :16.63  
                                                          3rd Qu.:17.00  
                                                          Max.   :19.68  
  sale_cnt_sku    sale_cnt_sku_wm sale_cnt_sku_dd
 Min.   :  1.00   Min.   :-14     Min.   : -1    
 1st Qu.: 12.00   1st Qu.:  5     1st Qu.:  5    
 Median : 27.00   Median : 13     Median : 12    
 Mean   : 32.78   Mean   : 17     Mean   : 15    
 3rd Qu.: 46.00   3rd Qu.: 25     3rd Qu.: 21    
 Max.   :519.00   Max.   :263     Max.   :519    
# 检查是否有缺失值
sapply(result, function(x) sum(is.na(x)))
            week         cur_date          shop_id           sku_id 
               0                0                0                0 
     sku_id_name      category_id category_id_name     base_amt_sku 
               0                0                0                0 
    sale_cnt_sku  sale_cnt_sku_wm  sale_cnt_sku_dd 
               0                0                0 
result[is.na(result)] <- 0
# 查看销量数据趋势
library(ggplot2)
ggplot(result, aes(x = cur_date, y = sale_cnt_sku, color = sku_id_name)) +
    geom_line() +
    theme_minimal() +
    labs(title = "销量数据趋势", x = "时间", y = "销量")

4、模型构建与结果验证

lm(sale_cnt_sku ~ 1 + cur_date + week, data = result) %>% 
  broom::tidy()
# A tibble: 8 × 5
  term        estimate std.error statistic   p.value
  <chr>          <dbl>     <dbl>     <dbl>     <dbl>
1 (Intercept) 6363.     25.4        251.   0        
2 cur_date      -0.317   0.00127   -250.   0        
3 week周六      12.9     0.165       77.8  0        
4 week周日      10.3     0.169       60.9  0        
5 week周三      -5.25    0.171      -30.6  6.11e-206
6 week周四       0.276   0.175        1.57 1.15e-  1
7 week周五      10.6     0.163       65.0  0        
8 week周一       2.74    0.167       16.4  1.26e- 60

以下是对输出结果的详细分析:

  1. 截距(Intercept):

    • 截距值为6362.6265831。这意味着当所有预测变量(cur_dateweek的各个类别)都为0或基准时,sale_cnt_sku的预期值为6362.6265831。在实际情况下,由于week是分类变量,并且cur_date通常不会为0(除非进行了特殊处理),这个截距值可能在实际预测中没有直接解释意义。
  2. 日期(cur_date):

    • cur_date的系数为-0.3169086,表明日期每增加一个单位(这里的具体单位取决于日期是如何编码的),sale_cnt_sku预期会减少0.3169086个单位。由于p值非常小(0),这个系数在统计上是显著的,意味着日期对sale_cnt_sku有显著影响。
  3. 星期几(week):

    • 模型的输出为week的每个类别提供了一个系数,与基准类别(未显示的类别,通常是字母排序最前的类别,除非在模型中指定了其他基准)进行比较。

    • week周六week周日week周五的系数都是正的,表明与基准类别相比,这些天的sale_cnt_sku预期会增加。

    • week周三的系数是负的,表明与基准类别相比,周三的sale_cnt_sku预期会减少。

    • week周四的系数虽然为正,但非常小,且p值相对较大(0.1153087),表明这个系数在统计上可能不显著。

    • week周一的系数也是正的,且p值非常小(表明在统计上显著),但与周六、周日和周五相比,其对sale_cnt_sku的影响较小。