制定最佳的零售產品價格

1. 簡介

上次更新時間:2021 年 9 月 15 日

要取得價格洞察和最佳化所需的資料因性質而異 (不同系統、當地情況不同等),因此建立結構良好、標準化與簡潔的 CDM 資料表就至關重要。包括用於設定最佳定價的重要屬性,例如交易、產品、價格和消費者。本文將逐步引導您完成下列操作步驟,提供定價分析的快速入門資源,您可以根據自己的需求加以擴充和自訂。下圖概述本文件涵蓋的步驟。

dd8545e0c9156b13.png

  1. 評估資料來源:首先,你必須取得資料來源目錄,以便建立 CDM。在這個步驟中,Dataprep 也可用來探索及找出輸入資料中的問題。例如遺漏和不相符的值、命名慣例、重複、資料完整性問題、離群值等。
  2. 將資料標準化:接著修正先前發現的問題,以確保資料正確、完整性、一致性和完整性。這個程序可以涉及各種 Dataprep 中的轉換,例如日期格式、值標準化、單位轉換、篩除不必要的欄位和值,以及分割、彙整或複製來源資料。
  3. 統整單一結構:管道的下一階段會將各個資料來源彙整為 BigQuery 中的單一寬表格,內含最精細的層級所有屬性。這種去正規化結構讓不需要彙整的有效率分析查詢。
  4. 提供數據分析和機器學習/AI:資料經過清理且格式化後,分析師就能探索歷來資料,瞭解先前價格變動帶來的影響。此外,BigQuery ML 也能用來建立預測模型,估算未來銷售量。這些模型的輸出內容可以整合至 Looker 中的資訊主頁,藉此建立「情況」商家使用者可在此分析特定價格變動後的銷售成效。

下圖顯示用來建立定價最佳化分析管道的 Google Cloud 元件。

e5d74e43074eedf4.png

建構項目

本文將介紹如何設計定價最佳化資料倉儲、長期自動準備資料、使用機器學習技術預測產品價格變動的影響,以及製作報表,為團隊提供可做為行動依據的洞察資料。

課程內容

  • 如何將 Dataprep 連結至價格分析的資料來源 (儲存在關聯資料庫、一般檔案、Google 試算表和其他支援的應用程式中)。
  • 如何建立 Dataprep 流程,在 BigQuery 資料倉儲中建立 CDM 資料表。
  • 如何使用 BigQuery ML 預測未來收益。
  • 如何在 Looker 中製作報表,以分析歷來價格和銷售趨勢,並瞭解未來價格變動的影響。

軟硬體需求

2. 在 BigQuery 中建立 CDM

在本節中,您將建立通用資料模型 (CDM),您可以在這個整合式檢視畫面中查看分析所需的資訊,以及建議價格變更。

  1. 開啟 BigQuery 控制台
  2. 選取要用來測試這個參考模式的專案。
  3. 使用現有資料集或建立 BigQuery 資料集。將資料集命名為 Pricing_CDM
  4. 建立資料表
create table `CDM_Pricing`
(
  Fiscal_Date DATETIME,
  Product_ID STRING,
  Client_ID INT64,
  Customer_Hierarchy STRING,
  Division STRING,
  Market STRING,
  Channel STRING,
  Customer_code INT64,
  Customer_Long_Description STRING,
  Key_Account_Manager INT64,
  Key_Account_Manager_Description STRING,
  Structure STRING,
  Invoiced_quantity_in_Pieces FLOAT64,
  Gross_Sales FLOAT64,
  Trade_Budget_Costs FLOAT64,
  Cash_Discounts_and_other_Sales_Deductions INT64,
  Net_Sales FLOAT64,
  Variable_Production_Costs_STD FLOAT64,
  Fixed_Production_Costs_STD FLOAT64,
  Other_Cost_of_Sales INT64,
  Standard_Gross_Margin FLOAT64,
  Transportation_STD FLOAT64,
  Warehouse_STD FLOAT64,
  Gross_Margin_After_Logistics FLOAT64,
  List_Price_Converged FLOAT64
);

3. 評估資料來源

在本教學課程中,您將使用儲存在 Google 試算表BigQuery 中的範例資料來源。

  • 交易 Google 試算表,內含每筆交易的一列。以及各產品售出數量、總銷售總額與相關費用等詳細資料。
  • 產品價格 Google 試算表,內含特定客戶的每月各項產品價格。
  • company_descriptions BigQuery 資料表,其中含有個別客戶資訊。

您可以使用下列陳述式建立此 company_descriptions BigQuery 資料表:

create table `Company_Descriptions`
(
 Customer_ID INT64,
 Customer_Long_Description STRING
);
insert into `Company_Descriptions` values (15458, 'ENELTEN');
insert into `Company_Descriptions` values (16080, 'NEW DEVICES CORP.');
insert into `Company_Descriptions` values (19913, 'ENELTENGAS');
insert into `Company_Descriptions` values (30108, 'CARTOON NT');
insert into `Company_Descriptions` values (32492, 'Thomas Ed Automobiles');

4. 建立流程

在這個步驟中,您將匯入範例 Dataprep 流程,用於轉換及統合上一節列出 的範例資料集。流程代表管道,也就是結合資料集和方案的物件,這些資料集和方案可用來轉換及彙整。

  1. 從 GitHup 下載定價最佳化模式流程套件,但不要解壓縮。此檔案包含用於轉換範例資料的定價最佳化設計模式流程。
  2. 在 Dataprep 中,按一下左側導覽列中的「Flows」圖示。接著在流程檢視畫面中,從內容選單中選取「Import」。匯入流程後,您可以選取流程來查看和編輯。

dd5213e4cf1e313f.png

  1. 在流程的左側,產品定價和 Google 試算表的這三項交易都必須以資料集的形式連結。方法是在 Google 試算表的資料集物件上按一下滑鼠右鍵,然後選取「取代」。然後點選「Import Datasets」(匯入資料集) 連結。按一下「編輯路徑」鉛筆,如下圖所示。

7e4af3e82955343f.png

將目前值替換為指向交易產品價格 Google 試算表的連結

如果 Google 試算表中有多個分頁,你可以在選單中選取要使用的分頁。按一下「編輯」編輯,選取要用做資料來源的分頁,然後按一下儲存,然後按一下匯入與新增至流程。返回互動視窗後,按一下「取代」。在這個流程中,每張工作表都會以各自的資料集表示,以在之後的方案中示範聯集不同的來源。

799bce35e0a60e87.png

  1. 定義 BigQuery 輸出資料表:

在這個步驟中,您將在每次執行 Dataoprep 工作時載入 BigQuery CDM_Pricing 輸出資料表的位置。

在「流程檢視」中,按一下「詳細資料」面板中的「結構定義對應輸出」圖示,然後點選「目的地」分頁標籤。如此一來,您就能編輯用於測試的手動目的地輸出,以及用於自動化整個流程的排定目的地輸出內容。請依照以下說明提出申訴:

  1. 編輯「Details」面板的「Manual Destination」,在「Manual Destinations」部分下方,按一下「Edit」按鈕。在「Publishing Settings」(發布設定) 頁面的「Publishing Actions」(發布動作) 下方,如果已有發布動作,按一下「Edit」(編輯) ;如果不是,請按一下「Add Action」(新增動作) 按鈕。從這裡前往 BigQuery 資料集前往您在上一個步驟中建立的 Pricing_CDM 資料集,然後選取 CDM_Pricing 資料表。確認已勾選「每次執行時附加至這個資料表」,然後按一下「新增」,再按一下「儲存設定」
  2. 編輯「排定的目的地」

在「Details」面板中,按一下「Scheduled Destinations」下方的 [Edit]

這些設定會沿用自手動目的地,您不需要進行任何變更。按一下儲存設定。

5. 將資料標準化

提供的流程聯集、格式並清除交易資料,然後將結果與公司說明和匯總價格資料彙整,以用於報表。這裡將介紹流程的各個元件,如下圖所示。

a033de41c68acc8b.png

6. 探索交易資料食譜

首先您將瞭解「交易資料方案」中用於準備交易資料的方案。按一下「Flow View」(流程檢視) 中的 [Transaction Data] (交易資料) 物件,在「Details」(詳細資料) 面板中,按一下 [Edit Recipe] (編輯方案) 按鈕。

轉換頁面隨即開啟,詳細資料面板中顯示方案。方案包含套用至資料的所有轉換步驟。您可以在「方案」內點選每個步驟之間的動作,查看方案中特定位置的資料狀態。

您也可以在每個方案步驟中按一下「More」選單,然後選取「Go to Selected」或「Edit it」,探索轉換的運作方式。

  1. 聯集交易:交易資料方案的第一個步驟「聯集」交易會儲存在代表每個月的不同工作表中。
  2. 將客戶說明標準化:方案中的下一個步驟可將客戶說明標準化。這表示客戶名稱可能有些許變更,因此我們想將名稱正規化。食譜示範兩種可能的方法首先運用標準化演算法,設定不同的標準化選項,例如「類似字串」其中含有共同字元的值會分群,也就是「發音」不同值會聚在一起或者,您也可以使用公司 ID,在上述 BigQuery 資料表中查詢公司說明。

您可以進一步瀏覽方案,探索各種用於清理資料及設定資料的多種技術:刪除資料列、根據模式的格式、透過查詢充實資料、處理遺漏的值,或是替換不必要的字元。

7. 探索產品價格資料方案

接著,您可以瞭解產品價格資料方案如何調整內容,其中會將準備的交易資料彙整至匯總價格資料。

按一下頁面頂端的「定價最佳化設計模式」,關閉「轉換器」頁面並返回「流程檢視」。接著點選「產品價格資料」物件並編輯食譜。

  1. 解除每月價格欄的資料透視方式:點選 2 到 3 個步驟之間的方案,即可查看在解除透視步驟之前的資料呈現方式。您會注意到資料中,交易金額每個月分別顯示在不同的資料欄:Jan Fev Mar。這並不是在 SQL 中套用匯總 (即平均交易) 計算方法的方便格式。資料不得透視,讓每個資料欄成為 BigQuery 資料表中的資料列。這個方案會利用 un 透視 函式,將每個月的 3 個資料欄轉換成一個資料列,方便您進一步套用群組計算。
  2. 依客戶、產品和日期計算平均交易價值:我們會計算每個客戶、產品和日期的平均交易價值。我們可以使用匯總函式並產生新表格 (選項「分組依據為新資料表」)。在此情況下,我們會匯總群組層級的資料,並遺失每筆交易的詳細資料。或者,我們也可以決定將詳細資料和匯總值保留在同一個資料集 (選項「分組依據為新資料欄」),這樣就能輕鬆套用比率 (例如產品類別佔整體收益的貢獻百分比)。您可以嘗試這個行為,請編輯方案步驟 7,然後選取「Group by as a new table」(分組依據為新資料表)或「分組依據為新資料欄」以便瞭解差異
  3. 彙整定價日期:最後,彙整可用來將多個資料集合併為較大的資料集,並在初始資料集中加入資料欄。在這個步驟中,價格資料會與交易資料方案的輸出內容彙整,依據「Pricing Data.Product Code」= 交易資料.SKU'和「Price Data.Price Date」=「交易資料.財務日期」

如要進一步瞭解可透過 Dataprep 套用的轉換作業,請參閱 Trifacta 資料整理一覽表

8. 瀏覽結構定義對應方案

最後一項方案「結構定義對應」可確保產生的 CDM 資料表與現有 BigQuery 輸出資料表的結構定義相符。這裡的快速目標 功能會使用模糊比對法來重新格式化資料結構,以比對 BigQuery 資料表,從而比較兩個結構定義並套用自動套用變更。

9. 在單一結構中整合

設定來源和目的地並已探索流程步驟後,您可以執行流程,將 CDM 資料表轉換並載入 BigQuery。

  1. 執行結構定義對應輸出:在流程檢視畫面中,選取「結構定義對應」輸出物件,然後按一下「執行」。按鈕。選取「Trifacta Photon」執行中的環境並取消勾選「略過方案錯誤」。然後按一下「Run」按鈕。如果指定的 BigQuery 資料表存在,Dataprep 會附加新資料列,否則系統會建立新的資料表。
  2. 查看工作狀態:Dataprep 會自動開啟「Run Job」頁面,方便您監控工作執行作業。系統應該會在幾分鐘內繼續並載入 BigQuery 資料表。工作完成後,系統會在 BigQuery 中以簡潔、結構化的正規化格式載入定價 CDM 輸出內容,方便您進行分析。

10. 提供數據分析和ML/AI

Analytics 必要條件

為了執行某些數據分析和預測模型,並帶來有趣的結果,我們建立了更廣泛且相關的資料集,藉此發掘特定洞察。必須先將這項資料上傳至 BigQuery 資料集,才能繼續本指南。

按一下「+ 建立資料表」按鈕,並定義這些參數:

  • 透過上傳項目建立資料表,並選取 CDM_Pricing_Large_Table.csv 檔案
  • 結構定義自動偵測、檢查結構定義和輸入參數
  • 進階選項、寫入偏好設定、覆寫資料表

ff9ec8b9f580b139.png

  • 按一下「建立資料表」

建立資料表並上傳資料後,在 BigQuery 專用的 Google 控制台中,您會看到新資料表的詳細資料,如下所示。有了 BigQuery 的定價資料,我們就能輕鬆提出更全面的問題,進一步分析定價資料。

93e4c05972af1999.png

11. 查看價格異動的影響

舉例來說,假設你先前變更了商品價格,訂單行為的變化便可以分析結果。

  1. 首先,你可以建立臨時表格,每當產品價格有所變更,該表會一行顯示一條目,其中含有特定產品價格的相關資訊,例如每個價格的訂單數量,以及與該價格相關的總淨銷售額。
create temp table price_changes as (
select
       product_id,
       list_price_converged,
       total_ordered_pieces,
       total_net_sales,
       first_price_date,
       lag(list_price_converged) over(partition by product_id order by first_price_date asc) as previous_list,
       lag(total_ordered_pieces) over(partition by product_id order by first_price_date asc) as previous_total_ordered_pieces,
       lag(total_net_sales) over(partition by product_id order by first_price_date asc) as previous_total_net_sales,
       lag(first_price_date) over(partition by product_id order by first_price_date asc) as previous_first_price_date
       from (
           select
               product_id,list_price_converged,sum(invoiced_quantity_in_pieces) as total_ordered_pieces, sum(net_sales) as total_net_sales, min(fiscal_date) as first_price_date
           from `{{my_project}}.{{my_dataset}}.CDM_Pricing` AS cdm_pricing
           group by 1,2
           order by 1, 2 asc
       )
);
select * from price_changes where previous_list is not null order by product_id, first_price_date desc

b320ba40f0692826.png

  1. 接著,透過臨時資料表計算所有 SKU 的平均價格變化:
select avg((previous_list-list_price_converged)/nullif(previous_list,0))*100 as average_price_change from price_changes;
  1. 最後,您可以查看每筆價格異動與訂購商品總數之間的關聯性,藉此分析價格變更後的情況:
select
(total_ordered_pieces-previous_total_ordered_pieces)/nullif(previous_total_ordered_pieces,0) 

CANNOT TRANSLATE

price_changes_percent_ordered_change,
(list_price_converged-previous_list)/nullif(previous_list,0)  

CANNOT TRANSLATE

price_changes_percent_price_change
from price_changes

12. 建立時間序列預測模型

接下來,您可以利用 BigQuery 內建的機器學習功能,建立 ARIMA 時間序列預測模型,預測每項商品預計售出的數量。

  1. 首先,建立 ARIMA_PLUS 模型
create or replace `{{my_project}}.{{my_dataset}}.bqml_arima`
options
 (model_type = 'ARIMA_PLUS',
  time_series_timestamp_col = 'fiscal_date',
  time_series_data_col = 'total_quantity',
  time_series_id_col = 'product_id',
  auto_arima = TRUE,
  data_frequency = 'AUTO_FREQUENCY',
  decompose_time_series = TRUE
 ) as
select
 fiscal_date,
 product_id,
 sum(invoiced_quantity_in_pieces) as total_quantity
from
 `{{my_project}}.{{my_dataset}}.CDM_Pricing` 
group by 1,2;
  1. 接著,您將使用 ML.FORECAST 函式預測每項產品的未來銷售量:
select
*
from
ML.FORECAST(model testing.bqml_arima,
            struct(30 as horizon, 0.8 as confidence_level));
  1. 您可以使用這些預測查詢字串,嘗試瞭解提高售價可能會產生什麼影響。舉例來說,如果將每項產品的價格提高 15%,即可使用如下查詢計算下個月的總收益:
select
sum(forecast_value * list_price) as total_revenue
from ml.forecast(mode testing.bqml_arima,
            struct(30 as horizon, 0.8 as confidence_level)) forecasts
left join (select product_id,
                array_agg(list_price_converged
                       order by fiscal_date desc limit 1)[offset(0)] as list_price
                from `leigha-bq-dev.retail.cdm_pricing` group by 1)  recent_prices
using (product_id);

13. 建立報表

非正規化的定價資料現在都集中在 BigQuery 中,且您已瞭解如何針對這些資料執行有意義的查詢。接下來,請開始製作報表,讓企業使用者探索這些資訊並採取行動。

如果您已有 Looker 執行個體,則可使用 這個 GitHub 存放區中的 LookML 開始分析這個模式的定價資料。只要建立新的 Looker 專案、新增 LookML,然後替換各個資料檢視檔案中的連結資料表名稱,即可配合您的 BigQuery 設定。

在這個模式中,您會看到先前顯示衍生資料表 ( 在這個檢視檔案中),方便我們檢查價格異動:

view: price_changes {
    derived_table: {
      sql: select
        product_id,
        list_price_converged,
        total_ordered_pieces,
        total_net_sales,
        first_price_date,
        lag(list_price_converged) over(partition by product_id order by first_price_date asc) as previous_list,
        lag(total_ordered_pieces) over(partition by product_id order by first_price_date asc) as previous_total_ordered_pieces,
        lag(total_net_sales) over(partition by product_id order by first_price_date asc) as previous_total_net_sales,
        lag(first_price_date) over(partition by product_id order by first_price_date asc) as previous_first_price_date
        from (
      select
         product_id,list_price_converged,sum(invoiced_quantity_in_pieces) as total_ordered_pieces, sum(net_sales) as total_net_sales, min(fiscal_date) as first_price_date
      from ${cdm_pricing.SQL_TABLE_NAME}  AS cdm_pricing
      group by 1,2
      order by 1, 2 asc
      )
       ;;
    }
...
}

以及我們先前介紹BigQuery ML ARIMA 模型,可用來預測未來的銷售量 ( 在這個檢視檔案內)

view: arima_model {
  derived_table: {
    persist_for: "24 hours"
    sql_create:
      create or replace model ${sql_table_name}
            options
              (model_type = 'arima_plus',
               time_series_timestamp_col = 'fiscal_date',
               time_series_data_col = 'total_quantity',
               time_series_id_col = 'product_id',
               auto_arima = true,
               data_frequency = 'auto_frequency',
               decompose_time_series = true
              ) as
            select
              fiscal_date,
              product_id,
              sum(invoiced_quantity_in_pieces) as total_quantity
            from
              ${cdm_pricing.sql_table_name}
            group by 1,2 ;;
          }
   }
...
}

LookML 也提供範例資訊主頁你可以在這裡存取試用版的資訊主頁。資訊主頁的第一個部分為使用者提供詳盡的銷售、費用、定價和利潤變化相關資訊。如果你是企業使用者,不妨建立快訊來告知銷售量是否下降到 X% 以下,因為這表示你可能會獲得較低的價格。

b531e169b192c111.png

下一節如下所示,使用者可以瞭解價格變動的趨勢。您還可以深入細查特定產品以瞭解確切的定價和價格的變化,藉此找出特定產品,以便深入分析。

6a98666697aa7a1.gif

最後,報表底部會顯示 BigQueryML 模型的結果。只要使用 Looker 資訊主頁頂端的篩選器,即可輕鬆輸入參數,模擬上述各種情況。例如,查看訂單量降到預估價值的 75%,以及所有產品的價格都提高 25% 時會發生什麼情況 (如下所示)

d3a9d37c89c39b99.gif

這項功能由 LookML 中的參數驅動,隨後會直接併入此處顯示的測量計算中。您可以透過這類報表,找出所有產品的最佳價格,或細查特定產品的資料,確定該在何處提高或降低價格,以及總收益和淨收益的結果。

14. 適應您的定價系統

本教學課程雖然轉換範例資料來源,但也會面臨許多關於不同平台價格資產的資料挑戰。定價資產採用不同的匯出格式 (通常為 xls、Sheets、csv、txt、關聯資料庫、商業應用程式),可顯示摘要和詳細結果,每個格式都可連結至 Dataprep。建議您一開始先比照上述範例說明轉換需求。釐清規格需求並識別所需轉換類型後,您就能使用 Dataprep 設計這些轉換類型。

  1. 複製 Dataprep 流程的副本 (按一下流程右側的 **...「更多」按鈕,然後選取「複製」選項),您要自訂,或利用新的 Dataprep 流程從頭開始。
  2. 連結至自己的定價資料集。Dataprep 原生支援 Excel、CSV、Google 試算表和 JSON 等檔案格式。您也可以使用 Dataprep 連接器連線至其他系統。
  3. 將資料資產分派到您識別的各種轉換類別。請為每個類別建立一個食譜。從這個設計模式提供的流程中汲取靈感,以轉換資料並撰寫自己的食譜。如果遇到困難,也別擔心,請在 Dataprep 畫面左下方的即時通訊對話方塊中尋求協助。
  4. 將方案連線至 BigQuery 執行個體。您不必擔心在 BigQuery 中手動建立資料表,Dataprep 會自動為您處理。建議您在流程中新增輸出內容時,選取「手動目的地」,然後在每次執行時捨棄資料表。分別測試每個食譜,直到提供預期結果為止。測試完成後,每次執行時都會將輸出內容轉換為「附加至資料表」,避免刪除先前的資料。
  5. 您可以選擇為要按照排程執行的流程建立關聯。如果程序需要持續執行,這項功能就能派上用場。您可以根據所需的更新間隔,定義每天或每小時載入回應的時間表。如果您決定按排程執行流程,就必須在各個方案的流程中新增排程目的地輸出。

修改 BigQuery 機器學習模型

本教學課程提供一個 ARIMA 模型範例。不過,您可以在開發模型時控管其他參數,確保模型最適合您的資料。詳情請參閱說明文件中的 範例。此外,您也可以使用 BigQuery ML.ARIMA_EVALUATEML.ARIMA_COEFFICIENTSML.EXPLAIN_FORECAST 函式,進一步瞭解模型並做出最佳化決策。

編輯 Looker 報表

按照上述說明將 LookML 匯入自有專案後,你可以直接編輯以新增其他欄位、修改計算或使用者輸入的參數,以及變更資訊主頁中的圖表,以符合業務需求。如要進一步瞭解如何在 LookML 中開發資料,請參閱這篇文章;如要以視覺化方式呈現 Looker 資料,請參閱這篇文章。

15. 恭喜

您現已瞭解最佳化零售產品所需的重要步驟定價!

後續步驟

探索其他智慧數據分析參考模式

其他資訊