Kolibri Games 的資料堆積疊發展並非一蹴可幾,而是隨著業務成長而不斷調整最佳化。早期,他們仰賴第三方工具進行基本資料分析,但隨著遊戲 Idle Miner Tycoon 的成功,資料量的增加與分析需求的提升,促使他們開始建構自有的資料平台。從 Azure 雲端服務到 Snowflake 資料倉儲,再到匯入 dbt 提升資料轉換效率,Kolibri Games 持續精進其資料技術堆積疊。同時,他們也逐步調整團隊架構,嵌入領域專家,建立跨功能團隊,強化資料驅動的企業文化。最終,他們透過匯入資料網格架構,提升資料可信度、加快開發速度,並實作更精細的玩家個人化體驗。
Kolibri Games資料堆積疊發展歷程:從精實創業到資料驅動
初期挑戰與資料堆積疊建立(2017年前)
作為一家精實創業公司,Kolibri Games的創始人完全依賴第三方工具來進行資料分析與遊戲最佳化。最初的資料堆積疊包括:
- Facebook Analytics:用於基本的使用者行為分析
- Ad partners:廣告合作夥伴,用於廣告投放與跟蹤
- Firebase:協助修復應用程式當機和錯誤,提高應用穩定性
- GameAnalytics:用於遊戲內的關鍵績效指標(KPIs)分析,如使用者留存率
圖示:Kolibri的第一個資料堆積疊
此圖示展示了Kolibri Games初期使用的各種第三方資料分析工具及其相互關係。
圖表翻譯: 圖中呈現了Kolibri Games初期資料堆積疊的組成部分,包括各個第三方工具之間的連線與資料流動情況。
初期的資料挑戰
- 分析工具分散,缺乏統一的資料檢視
- KPI計算方式不透明,不同工具之間存在不一致性
- SDK整合導致的技術問題
- 缺乏靈活性,難以深入挖掘指標
追求效能行銷與資料能力的提升(2017)
隨著Idle Miner Tycoon遊戲的流行,Kolibri Games的團隊規模擴大,公司從學生公寓搬遷至卡爾斯魯厄的正式辦公室。為了取得更多使用者並最佳化行銷績效,團隊建立了資料能力,主要目標包括:
- 計算廣告支出回報(ROAS)
- 建立簡單的使用者生命週期價值(LTV)預測
- 構建付費廣告競價指令碼以最佳化廣告活動績效
團隊引入了第三方移動測量合作夥伴工具AppsFlyer,一個SaaS移動行銷分析與歸因平台,用於深入瞭解廣告活動的投資回報率和使用者生命週期價值。
圖示:2017年的資料堆積疊
此圖示展示了Kolibri Games在2017年引入AppsFlyer後的資料堆積疊。
圖表翻譯: 圖中詳細展示了AppsFlyer如何與其他資料工具整合,實作更精準的行銷資料分析和廣告最佳化。
當前的資料挑戰
- 缺乏透明度,資料可見性不足
- 容易出錯,資料準確性存疑
- 缺乏版本控制,資料管理混亂
- 資料更加分散,難以整合
專業化與資料集中(2018)
2018年,Kolibri Games遷至柏林,擴大了開發者和設計師團隊,António加入公司,剛好趕上5000萬下載量的盛事。隨著資料工程師的加入,專業的資料組織開始成形,主要目標包括:
- 投資自有資料解決方案,集中資料管理
- 收集原始資料,建立中央資料倉儲
- 建立儀錶板,提供資料透明度與深入分析能力
團隊使用Azure雲端服務建立了第一版資料平台,包括:
- Data Factory(Azure資料工廠)
- Event Hubs(Azure事件中心)
- Stream Analytics(Azure串流分析)
- Data Lake Analytics(Azure資料湖分析)
- Power BI(後來遷移到Looker)
- SQL資料函式庫
圖示:2018年的資料團隊與技術堆積疊
此圖示展示了Kolibri Games在2018年建立的資料平台架構。
圖表翻譯: 圖中詳細說明瞭資料平台的各個組成部分及其相互關係,包括資料流動與處理過程。
面臨的挑戰
- SQL資料函式庫成為效能瓶頸
- 資料整合作業與查詢作業相互幹擾,導致系統不可預測且緩慢
- 缺乏有效的警示和監控機制,作業失敗頻繁
邁向資料驅動(2019)
隨著成功的新遊戲推出、品牌重塑和全球認可度的提升,Kolibri Games在2019年迎來了新的發展機遇。公司達到1億下載量,員工數量突破100人。隨著使用者和產品的增加,António和他的團隊認識到,資料驅動是推動公司邁向下一階段的關鍵。
- 進一步最佳化資料架構,提高系統可靠性
- 加強資料監控和警示機制,減少作業失敗率
- 深入利用資料分析,推動業務決策與最佳化
程式碼示例:資料處理流程最佳化
# 使用Azure Data Factory進行資料整合的示例程式碼
import pandas as pd
from azure.storage.blob import BlobServiceClient
# 初始化Blob服務客戶端
blob_service_client = BlobServiceClient.from_connection_string(
"DefaultEndpointsProtocol=https;AccountName=your_account;AccountKey=your_key;EndpointSuffix=core.windows.net"
)
# 定義資料處理函式
def process_data(blob_name):
# 下載Blob資料
blob_client = blob_service_client.get_blob_client(blob_name)
data = blob_client.download_blob().content_as_text()
# 處理資料
df = pd.read_json(data)
# 進行資料清洗和轉換
processed_data = df.dropna() # 簡單示例:刪除缺失值
# 上傳處理後的資料
processed_blob_client = blob_service_client.get_blob_client("processed_" + blob_name)
processed_blob_client.upload_blob(processed_data.to_json(), overwrite=True)
# 執行資料處理
process_data("raw_data.json")
內容解密:
- 初始化Blob服務客戶端:使用Azure Storage的連線字串初始化BlobServiceClient,用於與Azure Blob Storage互動。
- 定義資料處理函式:
process_data
函式負責下載原始資料、進行處理(如刪除缺失值),並將處理後的資料上傳至新的Blob。 - 資料處理邏輯:使用Pandas讀取JSON資料,並進行簡單的資料清洗(如刪除缺失值)。
- 上傳處理後的資料:將處理後的資料以JSON格式上傳至Azure Blob Storage。
Kolibri Games 資料堆積疊發展歷程:從資料分析到機器學習的轉型
前言
Kolibri Games 是德國的遊戲開發公司,專注於開發手機遊戲。該公司在 2019 年面臨資料分析的挑戰,需要改進其資料堆積疊以支援資料驅動的決策。本文將介紹 Kolibri Games 如何發展其資料堆積疊,並克服相關的挑戰。
初期發展(2019 年)
在 2019 年,Kolibri Games 的目標是透過理解玩家行為、進行資料驅動的實驗以及改進資料技術堆積疊來創造遊戲洞察。為此,他們:
- 建立了貨幣化儀錶板,以顯示公司透過優惠、商店和廣告賺取的收入
- 建立了進展和參與度儀錶板,以瞭解玩家如何與遊戲互動(例如,他們何時離開遊戲以及如何與特定功能互動)
- 進行 A/B 測試
- 提高資料倉儲的效能和資料管道的可維護性
團隊擴張與技術堆疊調整
為了使大量的資料變得有用,Kolibri Games 增加了資料團隊的人員,包括一名遊戲資料負責人和兩名 BI 開發人員。資料工程師與基礎設施團隊密切合作,維護系統、整合新工具並維護串流使用案例,同時為 BI 開發人員建立框架,以便他們能夠處理資料整合、資料建模和資料函式庫視覺化。
技術堆疊的演變
由於資料團隊需要更大的靈活性和更方便的協作,António 用 Databricks 取代了一些 Azure 服務。然而,他們發現使用 Spark 來利用資料湖作為資料倉儲時,團隊成員更喜歡使用 Python 和 SQL,而且在使用 Spark 時,Looker 的效能並不如預期。因此,他們最終用 Snowflake 取代了 SQL 資料函式庫,Snowflake 成為所有分析的主要計算引擎。
面臨的挑戰
儘管進行了技術堆疊的調整,Kolibri Games 仍然面臨一些關鍵挑戰:
- A/B 測試難以設定,缺乏透明度,且無法呈現在儀錶板上
- 遊戲中沒有資料驅動的決策
- 大部分決策仍然根據直覺和社群反饋
被 Ubisoft 收購後的轉型(2020 年)
2020 年初,Kolibri Games 被法國遊戲巨頭 Ubisoft 收購。隨著資源的增加,António 的團隊繼續成長,並在平台中加入了機器學習功能,同時受到資料網格架構和領域特定資料所有權的啟發。為了建立資料驅動的文化,他們引入了資料特定的服務水平協定,並專注於增加資料的自助服務存取。
關鍵舉措
為了實作資料驅動的決策,Kolibri Games 提出了以下目標:
- 90% 的 Idle Miner Tycoon 遊戲決策需要有資料支援
- 90% 的問題的洞察時間需要少於一小時
- 90% 的變更需要透過分析進行驗證
為此,資料平台團隊將:
- 改進 A/B 測試流程,以幫助對功能和變更做出明智的決策
- 透過為玩家群體建立遊戲組態來改進個人化
- 使用預測分析來預測生命週期價值和流失率,以調整遊戲
- 使人們能夠在無需諮詢資料分析師的情況下回答資料相關問題
團隊結構與技術堆疊的進一步演變
隨著資料組織(圖 9-9)專注於領域特定的資料所有權,將新的分析師直接嵌入產品團隊,與產品經理密切合作,以瞭解需求並調整優先順序,以反映產品的實際需求。資料平台團隊新增了一名資料工程師和兩名資料科學家,專門從事 ML 演算法和 A/B 測試資料管道。
資料倉儲架構的改進
為了加快資料清理和轉換,António 的團隊在 Snowflake 中加入了資料倉儲架構,更好地定義了應用業務邏輯的位置(圖 9-10)。他們還從 ETL 轉向 ELT,直接在 Snowflake 中進行資料清理和轉換。結合 dbt(一種資料轉換工具),他們提高了平台上所有人之間的協作透明度和可見性。
新的挑戰
在資料平台旅程的這個階段,一些關鍵挑戰浮現出來:
- 資料信任
- 軟體穩定性
- 個人化擴充套件
內容解密:
Kolibri Games 的資料堆積疊發展歷程展現了資料驅動決策在遊戲開發中的重要性。透過不斷改進其資料技術堆積疊和團隊結構,Kolibri Games 能夠更好地理解玩家行為、最佳化遊戲體驗並提高商業決策的準確性。
程式碼範例 1:使用 Snowflake 進行資料倉儲
-- 在 Snowflake 中建立一個新的資料表
CREATE TABLE game_data (
player_id INT,
game_id INT,
play_time FLOAT,
revenue FLOAT
);
-- 將資料插入資料表
INSERT INTO game_data (player_id, game_id, play_time, revenue)
VALUES (1, 101, 120.5, 10.99),
(2, 102, 90.2, 5.99),
(3, 101, 150.8, 7.99);
-- 查詢資料表中的資料
SELECT * FROM game_data WHERE game_id = 101;
內容解密:
此 SQL 程式碼展示瞭如何在 Snowflake 中建立資料表、插入資料並進行查詢。這些操作是資料倉儲管理的基本組成部分,對於儲存和分析遊戲資料至關重要。
圖表範例:資料團隊架構
graph LR A[資料來源] --> B[資料整合] B --> C[資料倉儲] C --> D[資料分析] D --> E[資料視覺化]
圖表翻譯: 此圖表展示了 Kolibri Games 的資料團隊架構,從資料來源到資料視覺化的整個流程。資料來源包括遊戲資料、使用者反饋等,資料整合涉及資料的收集和處理,資料倉儲負責儲存和管理資料,資料分析則是對資料進行深入挖掘以獲得洞察,最終透過資料視覺化呈現給決策者。
資料驅動的企業轉型:Kolibri Games 的資料堆積疊演進之路
在數位時代,資料已成為企業決策的核心驅動力。Kolibri Games,一家專注於行動遊戲的公司,如何透過建立資料驅動的文化和技術架構,不斷最佳化其資料堆積疊,以應對快速變化的市場需求?本文將探討 Kolibri Games 的資料團隊如何在五年的時間裡,從最初的資料收集逐步建立起完善的資料網格(Data Mesh)架構,並從中汲取寶貴的經驗。
資料驅動的初期挑戰(2016-2020)
在 2016 年至 2020 年期間,Kolibri Games 的資料團隊面臨著諸多挑戰。首先,資料的使用並未深入到產品開發的各個環節。為了改變這一現狀,團隊開始著手衡量資料在產品開發中的實際應用情況,並建立相關的關鍵績效指標(KPIs)。透過這些指標,團隊能夠更有效地推動資料驅動的決策過程。
提升資料品質與可信度
隨著資料量的增加,新的使用場景和模型的出現,團隊開始面臨資料監控和正確性的挑戰。為瞭解決這些問題,Kolibri Games 在 2021 年將重點放在建立資料的可信度和可靠性上,這是實作資料網格架構的關鍵一步。
建立資料網格架構(2021)
2021 年,Kolibri Games 的資料團隊制定了明確的目標:透過建立資料網格架構,提高資料的可靠性,加快開發速度,減少事件發生次數,並透過進階分析提升玩家個人化體驗。具體措施包括:
- 提升測試能力
- 建立統一的發布和開發流程
- 增加監控和警示機制
- 重點發展進階分析
- 擴充套件資料平台功能,強化資料監控和工程最佳實踐
- 建立跨功能領域團隊
團隊架構的調整
為了支援資料網格架構的實施,Kolibri Games 對資料團隊進行了調整。他們在產品和行銷團隊中嵌入了領域特定的資料團隊,並新增了專案經理和商業智慧(BI)開發人員,以協助定義工作內容和整合資料來源。同時,中央資料平台團隊繼續專注於建立解決方案、框架、維護基礎設施和進階分析。
資料技術堆積疊的演進
在 2021 年,Kolibri Games 的資料技術堆積疊持續成長。他們集中了開發和發布流程,確保資料平台、行銷和產品團隊遵循相同的合併請求和發布至生產環境的流程。為了提升資料品質和可觀察性,團隊投資了 dbt 和資料可觀察性工具,以實作更豐富的轉換和更佳的資料品質可視性。
-- 使用dbt建立資料模型範例
{{
config(
materialized='table',
alias='player_behavior'
)
}}
SELECT
player_id,
event_type,
event_timestamp,
game_id
FROM
raw_player_events
WHERE
event_timestamp >= '{{ var("start_date") }}'
AND event_timestamp < '{{ var("end_date") }}'
內容解密:
此 SQL 程式碼片段展示瞭如何使用 dbt 建立一個名為 player_behavior
的資料表。透過設定 materialized='table'
,dbt 將把查詢結果物化為一個實體表。alias
引數用於指定該表的別名,方便後續查詢使用。查詢本身從 raw_player_events
表中篩選出特定時間範圍內的玩家事件資料。變數 start_date
和 end_date
透過 dbt 的 var
函式傳入,提供了靈活的日期篩選功能。
資料監控與品質保證
為了進一步提升資料品質,Kolibri Games 決定投資於一個全面的資料監控解決方案。該方案能夠跨越資料倉儲中的所有資料資產,提供端對端的資料血統(lineage)分析,從而加快故障排除和事件解決的速度。
graph LR A[原始資料收集] --> B[資料處理與轉換] B --> C[資料儲存與管理] C --> D[資料分析與應用] D --> E[資料驅動決策]
圖表翻譯: 此圖表展示了資料從收集到最終應用的整個流程。首先,原始資料被收集並傳輸到資料處理階段進行清洗和轉換。處理後的資料被儲存和管理,以便後續的分析和應用。最終,這些資料被用於支援業務決策,實作資料驅動的企業營運。
五年資料演進的五大關鍵經驗
Kolibri Games 的資料團隊在五年的演進過程中總結了五大關鍵經驗:
- 建立自有的資料堆積疊具有長期效益,因為它提供了全面的功能,支援資料驅動的產品開發和團隊協作。
- 技術選擇需根據資料規模和業務流程進行動態調整,在適當的時機更換技術,以滿足不斷變化的需求。
- 資料可觀察性對於建立資料信任至關重要,能夠及時發現問題並快速定位。
- 在推進進階資料應用之前,必須打好基礎,例如適時引入資料分析師,以充分利用資料。
- 建立資料驅動的文化比技術堆積疊的建設更為重要,文化是實作資料驅動的根本。
資料網格與分散式架構的未來
隨著越來越多的組織採用資料網格和分散式架構,創新、效率和可擴充套件性的機會將變得更加廣泛。然而,成功實施資料網格不僅需要技術和流程的支援,更需要企業文化的轉變。成為資料驅動的企業始終始於並終於文化。
使中繼資料為業務服務
在過去的十年中,資料團隊在收集大量資料方面變得越來越熟練。然而,單純的資料收集並不足以驅動數位創新和智慧決策。企業需要理解和利用資料,而這正是中繼資料(metadata)的角色。中繼資料是關於資料的資料,它為資料提供了上下文和意義。
資料血統:中繼資料的應使用案例項
資料血統(lineage)是一種追蹤資料管道中上游和下游依賴關係的中繼資料。雖然資料血統本身可以視覺化呈現,但如果沒有具體的應用場景,它僅僅是視覺上的展示,缺乏實際價值。
import pandas as pd
# 建立資料血統追蹤範例
def track_data_lineage(data_source, transformation_steps):
lineage_info = {
'source': data_source,
'transformations': transformation_steps
}
return lineage_info
# 使用範例
data_source = 'raw_player_data'
transformation_steps = ['cleaning', 'aggregation', 'feature_engineering']
lineage_info = track_data_lineage(data_source, transformation_steps)
print(lineage_info)
內容解密:
此 Python 程式碼片段展示瞭如何建立一個簡單的資料血統追蹤功能。track_data_lineage
函式接受資料來源和轉換步驟作為輸入,傳回一個包含血統資訊的字典。透過記錄資料的來源和經過的轉換步驟,可以有效地追蹤資料的流轉過程,為資料的理解和使用提供支援。