1. 簡介
上次更新時間:2021 年 9 月 15 日
要取得價格洞察和最佳化所需的資料因性質而異 (不同系統、當地情況不同等),因此建立結構良好、標準化與簡潔的 CDM 資料表就至關重要。包括用於設定最佳定價的重要屬性,例如交易、產品、價格和消費者。本文將逐步引導您完成下列操作步驟,提供定價分析的快速入門資源,您可以根據自己的需求加以擴充和自訂。下圖概述本文件涵蓋的步驟。
- 評估資料來源:首先,你必須取得資料來源目錄,以便建立 CDM。在這個步驟中,Dataprep 也可用來探索及找出輸入資料中的問題。例如遺漏和不相符的值、命名慣例、重複、資料完整性問題、離群值等。
- 將資料標準化:接著修正先前發現的問題,以確保資料正確、完整性、一致性和完整性。這個程序可以涉及各種 Dataprep 中的轉換,例如日期格式、值標準化、單位轉換、篩除不必要的欄位和值,以及分割、彙整或複製來源資料。
- 統整單一結構:管道的下一階段會將各個資料來源彙整為 BigQuery 中的單一寬表格,內含最精細的層級所有屬性。這種去正規化結構讓不需要彙整的有效率分析查詢。
- 提供數據分析和機器學習/AI:資料經過清理且格式化後,分析師就能探索歷來資料,瞭解先前價格變動帶來的影響。此外,BigQuery ML 也能用來建立預測模型,估算未來銷售量。這些模型的輸出內容可以整合至 Looker 中的資訊主頁,藉此建立「情況」商家使用者可在此分析特定價格變動後的銷售成效。
下圖顯示用來建立定價最佳化分析管道的 Google Cloud 元件。
建構項目
本文將介紹如何設計定價最佳化資料倉儲、長期自動準備資料、使用機器學習技術預測產品價格變動的影響,以及製作報表,為團隊提供可做為行動依據的洞察資料。
課程內容
- 如何將 Dataprep 連結至價格分析的資料來源 (儲存在關聯資料庫、一般檔案、Google 試算表和其他支援的應用程式中)。
- 如何建立 Dataprep 流程,在 BigQuery 資料倉儲中建立 CDM 資料表。
- 如何使用 BigQuery ML 預測未來收益。
- 如何在 Looker 中製作報表,以分析歷來價格和銷售趨勢,並瞭解未來價格變動的影響。
軟硬體需求
- 已啟用計費功能的 Google Cloud 專案。瞭解如何確認專案已啟用計費功能。
- 您必須在專案中啟用 BigQuery。新專案會自動啟用這項功能。否則,請在現有專案上啟用。您也可以參閱這篇文章,進一步瞭解如何透過 Cloud 控制台開始使用 BigQuery。
- 您的專案也必須啟用 Dataprep。您可以在「大數據」部分的左側導覽選單中啟用 Dataprep。按照訂閱步驟啟用。
- 如要設定自己的 Looker 資訊主頁,您必須擁有 Looker 執行個體的開發人員存取權。如要申請試用,請按這裡與我們的團隊聯絡,或使用公開資訊主頁,透過範例資料探索資料管道的結果。
- 具備結構化查詢語言 (SQL) 的經驗,以及以下資訊的相關基本知識:Dataprep by Trifacta、BigQuery、Looker
2. 在 BigQuery 中建立 CDM
在本節中,您將建立通用資料模型 (CDM),您可以在這個整合式檢視畫面中查看分析所需的資訊,以及建議價格變更。
- 開啟 BigQuery 控制台。
- 選取要用來測試這個參考模式的專案。
- 使用現有資料集或建立 BigQuery 資料集。將資料集命名為
Pricing_CDM
。 - 建立資料表:
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 流程,用於轉換及統合上一節列出 的範例資料集。流程代表管道,也就是結合資料集和方案的物件,這些資料集和方案可用來轉換及彙整。
- 從 GitHup 下載定價最佳化模式流程套件,但不要解壓縮。此檔案包含用於轉換範例資料的定價最佳化設計模式流程。
- 在 Dataprep 中,按一下左側導覽列中的「Flows」圖示。接著在流程檢視畫面中,從內容選單中選取「Import」。匯入流程後,您可以選取流程來查看和編輯。
- 在流程的左側,產品定價和 Google 試算表的這三項交易都必須以資料集的形式連結。方法是在 Google 試算表的資料集物件上按一下滑鼠右鍵,然後選取「取代」。然後點選「Import Datasets」(匯入資料集) 連結。按一下「編輯路徑」鉛筆,如下圖所示。
將目前值替換為指向交易和產品價格 Google 試算表的連結。
如果 Google 試算表中有多個分頁,你可以在選單中選取要使用的分頁。按一下「編輯」編輯,選取要用做資料來源的分頁,然後按一下儲存,然後按一下匯入與新增至流程。返回互動視窗後,按一下「取代」。在這個流程中,每張工作表都會以各自的資料集表示,以在之後的方案中示範聯集不同的來源。
- 定義 BigQuery 輸出資料表:
在這個步驟中,您將在每次執行 Dataoprep 工作時載入 BigQuery CDM_Pricing 輸出資料表的位置。
在「流程檢視」中,按一下「詳細資料」面板中的「結構定義對應輸出」圖示,然後點選「目的地」分頁標籤。如此一來,您就能編輯用於測試的手動目的地輸出,以及用於自動化整個流程的排定目的地輸出內容。請依照以下說明提出申訴:
- 編輯「Details」面板的「Manual Destination」,在「Manual Destinations」部分下方,按一下「Edit」按鈕。在「Publishing Settings」(發布設定) 頁面的「Publishing Actions」(發布動作) 下方,如果已有發布動作,按一下「Edit」(編輯) ;如果不是,請按一下「Add Action」(新增動作) 按鈕。從這裡前往 BigQuery 資料集前往您在上一個步驟中建立的
Pricing_CDM
資料集,然後選取CDM_Pricing
資料表。確認已勾選「每次執行時附加至這個資料表」,然後按一下「新增」,再按一下「儲存設定」。 - 編輯「排定的目的地」
在「Details」面板中,按一下「Scheduled Destinations」下方的 [Edit]。
這些設定會沿用自手動目的地,您不需要進行任何變更。按一下儲存設定。
5. 將資料標準化
提供的流程聯集、格式並清除交易資料,然後將結果與公司說明和匯總價格資料彙整,以用於報表。這裡將介紹流程的各個元件,如下圖所示。
6. 探索交易資料食譜
首先您將瞭解「交易資料方案」中用於準備交易資料的方案。按一下「Flow View」(流程檢視) 中的 [Transaction Data] (交易資料) 物件,在「Details」(詳細資料) 面板中,按一下 [Edit Recipe] (編輯方案) 按鈕。
轉換頁面隨即開啟,詳細資料面板中顯示方案。方案包含套用至資料的所有轉換步驟。您可以在「方案」內點選每個步驟之間的動作,查看方案中特定位置的資料狀態。
您也可以在每個方案步驟中按一下「More」選單,然後選取「Go to Selected」或「Edit it」,探索轉換的運作方式。
- 聯集交易:交易資料方案的第一個步驟「聯集」交易會儲存在代表每個月的不同工作表中。
- 將客戶說明標準化:方案中的下一個步驟可將客戶說明標準化。這表示客戶名稱可能有些許變更,因此我們想將名稱正規化。食譜示範兩種可能的方法首先運用標準化演算法,設定不同的標準化選項,例如「類似字串」其中含有共同字元的值會分群,也就是「發音」不同值會聚在一起或者,您也可以使用公司 ID,在上述 BigQuery 資料表中查詢公司說明。
您可以進一步瀏覽方案,探索各種用於清理資料及設定資料的多種技術:刪除資料列、根據模式的格式、透過查詢充實資料、處理遺漏的值,或是替換不必要的字元。
7. 探索產品價格資料方案
接著,您可以瞭解產品價格資料方案如何調整內容,其中會將準備的交易資料彙整至匯總價格資料。
按一下頁面頂端的「定價最佳化設計模式」,關閉「轉換器」頁面並返回「流程檢視」。接著點選「產品價格資料」物件並編輯食譜。
- 解除每月價格欄的資料透視方式:點選 2 到 3 個步驟之間的方案,即可查看在解除透視步驟之前的資料呈現方式。您會注意到資料中,交易金額每個月分別顯示在不同的資料欄:Jan Fev Mar。這並不是在 SQL 中套用匯總 (即平均交易) 計算方法的方便格式。資料不得透視,讓每個資料欄成為 BigQuery 資料表中的資料列。這個方案會利用 un 透視 函式,將每個月的 3 個資料欄轉換成一個資料列,方便您進一步套用群組計算。
- 依客戶、產品和日期計算平均交易價值:我們會計算每個客戶、產品和日期的平均交易價值。我們可以使用匯總函式並產生新表格 (選項「分組依據為新資料表」)。在此情況下,我們會匯總群組層級的資料,並遺失每筆交易的詳細資料。或者,我們也可以決定將詳細資料和匯總值保留在同一個資料集 (選項「分組依據為新資料欄」),這樣就能輕鬆套用比率 (例如產品類別佔整體收益的貢獻百分比)。您可以嘗試這個行為,請編輯方案步驟 7,然後選取「Group by as a new table」(分組依據為新資料表)或「分組依據為新資料欄」以便瞭解差異
- 彙整定價日期:最後,彙整可用來將多個資料集合併為較大的資料集,並在初始資料集中加入資料欄。在這個步驟中,價格資料會與交易資料方案的輸出內容彙整,依據「Pricing Data.Product Code」= 交易資料.SKU'和「Price Data.Price Date」=「交易資料.財務日期」
如要進一步瞭解可透過 Dataprep 套用的轉換作業,請參閱 Trifacta 資料整理一覽表
8. 瀏覽結構定義對應方案
最後一項方案「結構定義對應」可確保產生的 CDM 資料表與現有 BigQuery 輸出資料表的結構定義相符。這裡的快速目標 功能會使用模糊比對法來重新格式化資料結構,以比對 BigQuery 資料表,從而比較兩個結構定義並套用自動套用變更。
9. 在單一結構中整合
設定來源和目的地並已探索流程步驟後,您可以執行流程,將 CDM 資料表轉換並載入 BigQuery。
- 執行結構定義對應輸出:在流程檢視畫面中,選取「結構定義對應」輸出物件,然後按一下「執行」。按鈕。選取「Trifacta Photon」執行中的環境並取消勾選「略過方案錯誤」。然後按一下「Run」按鈕。如果指定的 BigQuery 資料表存在,Dataprep 會附加新資料列,否則系統會建立新的資料表。
- 查看工作狀態:Dataprep 會自動開啟「Run Job」頁面,方便您監控工作執行作業。系統應該會在幾分鐘內繼續並載入 BigQuery 資料表。工作完成後,系統會在 BigQuery 中以簡潔、結構化的正規化格式載入定價 CDM 輸出內容,方便您進行分析。
10. 提供數據分析和ML/AI
Analytics 必要條件
為了執行某些數據分析和預測模型,並帶來有趣的結果,我們建立了更廣泛且相關的資料集,藉此發掘特定洞察。必須先將這項資料上傳至 BigQuery 資料集,才能繼續本指南。
- 從這個 GitHub 存放區下載大型資料集
- 在 BigQuery 適用的 Google 控制台,前往專案和 CDM_Pricing 資料集。
- 按一下選單,然後開啟資料集。我們會從本機檔案載入資料來建立資料表。
按一下「+ 建立資料表」按鈕,並定義這些參數:
- 透過上傳項目建立資料表,並選取 CDM_Pricing_Large_Table.csv 檔案
- 結構定義自動偵測、檢查結構定義和輸入參數
- 進階選項、寫入偏好設定、覆寫資料表
- 按一下「建立資料表」
建立資料表並上傳資料後,在 BigQuery 專用的 Google 控制台中,您會看到新資料表的詳細資料,如下所示。有了 BigQuery 的定價資料,我們就能輕鬆提出更全面的問題,進一步分析定價資料。
11. 查看價格異動的影響
舉例來說,假設你先前變更了商品價格,訂單行為的變化便可以分析結果。
- 首先,你可以建立臨時表格,每當產品價格有所變更,該表會一行顯示一條目,其中含有特定產品價格的相關資訊,例如每個價格的訂單數量,以及與該價格相關的總淨銷售額。
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
- 接著,透過臨時資料表計算所有 SKU 的平均價格變化:
select avg((previous_list-list_price_converged)/nullif(previous_list,0))*100 as average_price_change from price_changes;
- 最後,您可以查看每筆價格異動與訂購商品總數之間的關聯性,藉此分析價格變更後的情況:
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 時間序列預測模型,預測每項商品預計售出的數量。
- 首先,建立 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;
- 接著,您將使用 ML.FORECAST 函式預測每項產品的未來銷售量:
select
*
from
ML.FORECAST(model testing.bqml_arima,
struct(30 as horizon, 0.8 as confidence_level));
- 您可以使用這些預測查詢字串,嘗試瞭解提高售價可能會產生什麼影響。舉例來說,如果將每項產品的價格提高 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% 以下,因為這表示你可能會獲得較低的價格。
下一節如下所示,使用者可以瞭解價格變動的趨勢。您還可以深入細查特定產品以瞭解確切的定價和價格的變化,藉此找出特定產品,以便深入分析。
最後,報表底部會顯示 BigQueryML 模型的結果。只要使用 Looker 資訊主頁頂端的篩選器,即可輕鬆輸入參數,模擬上述各種情況。例如,查看訂單量降到預估價值的 75%,以及所有產品的價格都提高 25% 時會發生什麼情況 (如下所示)
這項功能由 LookML 中的參數驅動,隨後會直接併入此處顯示的測量計算中。您可以透過這類報表,找出所有產品的最佳價格,或細查特定產品的資料,確定該在何處提高或降低價格,以及總收益和淨收益的結果。
14. 適應您的定價系統
本教學課程雖然轉換範例資料來源,但也會面臨許多關於不同平台價格資產的資料挑戰。定價資產採用不同的匯出格式 (通常為 xls、Sheets、csv、txt、關聯資料庫、商業應用程式),可顯示摘要和詳細結果,每個格式都可連結至 Dataprep。建議您一開始先比照上述範例說明轉換需求。釐清規格需求並識別所需轉換類型後,您就能使用 Dataprep 設計這些轉換類型。
- 複製 Dataprep 流程的副本 (按一下流程右側的 **...「更多」按鈕,然後選取「複製」選項),您要自訂,或利用新的 Dataprep 流程從頭開始。
- 連結至自己的定價資料集。Dataprep 原生支援 Excel、CSV、Google 試算表和 JSON 等檔案格式。您也可以使用 Dataprep 連接器連線至其他系統。
- 將資料資產分派到您識別的各種轉換類別。請為每個類別建立一個食譜。從這個設計模式提供的流程中汲取靈感,以轉換資料並撰寫自己的食譜。如果遇到困難,也別擔心,請在 Dataprep 畫面左下方的即時通訊對話方塊中尋求協助。
- 將方案連線至 BigQuery 執行個體。您不必擔心在 BigQuery 中手動建立資料表,Dataprep 會自動為您處理。建議您在流程中新增輸出內容時,選取「手動目的地」,然後在每次執行時捨棄資料表。分別測試每個食譜,直到提供預期結果為止。測試完成後,每次執行時都會將輸出內容轉換為「附加至資料表」,避免刪除先前的資料。
- 您可以選擇為要按照排程執行的流程建立關聯。如果程序需要持續執行,這項功能就能派上用場。您可以根據所需的更新間隔,定義每天或每小時載入回應的時間表。如果您決定按排程執行流程,就必須在各個方案的流程中新增排程目的地輸出。
修改 BigQuery 機器學習模型
本教學課程提供一個 ARIMA 模型範例。不過,您可以在開發模型時控管其他參數,確保模型最適合您的資料。詳情請參閱說明文件中的 範例。此外,您也可以使用 BigQuery ML.ARIMA_EVALUATE、ML.ARIMA_COEFFICIENTS 和 ML.EXPLAIN_FORECAST 函式,進一步瞭解模型並做出最佳化決策。
編輯 Looker 報表
按照上述說明將 LookML 匯入自有專案後,你可以直接編輯以新增其他欄位、修改計算或使用者輸入的參數,以及變更資訊主頁中的圖表,以符合業務需求。如要進一步瞭解如何在 LookML 中開發資料,請參閱這篇文章;如要以視覺化方式呈現 Looker 資料,請參閱這篇文章。
15. 恭喜
您現已瞭解最佳化零售產品所需的重要步驟定價!
後續步驟
探索其他智慧數據分析參考模式
其他資訊
- 按這裡閱讀網誌
- 如要進一步瞭解 Dataprep,請按這裡
- 進一步瞭解 BigQuery Machine Learning
- 進一步瞭解 Looker