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")

內容解密:

  1. 初始化Blob服務客戶端:使用Azure Storage的連線字串初始化BlobServiceClient,用於與Azure Blob Storage互動。
  2. 定義資料處理函式process_data函式負責下載原始資料、進行處理(如刪除缺失值),並將處理後的資料上傳至新的Blob。
  3. 資料處理邏輯:使用Pandas讀取JSON資料,並進行簡單的資料清洗(如刪除缺失值)。
  4. 上傳處理後的資料:將處理後的資料以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_dateend_date 透過 dbt 的 var 函式傳入,提供了靈活的日期篩選功能。

資料監控與品質保證

為了進一步提升資料品質,Kolibri Games 決定投資於一個全面的資料監控解決方案。該方案能夠跨越資料倉儲中的所有資料資產,提供端對端的資料血統(lineage)分析,從而加快故障排除和事件解決的速度。

  graph LR
    A[原始資料收集] --> B[資料處理與轉換]
    B --> C[資料儲存與管理]
    C --> D[資料分析與應用]
    D --> E[資料驅動決策]

圖表翻譯: 此圖表展示了資料從收集到最終應用的整個流程。首先,原始資料被收集並傳輸到資料處理階段進行清洗和轉換。處理後的資料被儲存和管理,以便後續的分析和應用。最終,這些資料被用於支援業務決策,實作資料驅動的企業營運。

五年資料演進的五大關鍵經驗

Kolibri Games 的資料團隊在五年的演進過程中總結了五大關鍵經驗:

  1. 建立自有的資料堆積疊具有長期效益,因為它提供了全面的功能,支援資料驅動的產品開發和團隊協作。
  2. 技術選擇需根據資料規模和業務流程進行動態調整,在適當的時機更換技術,以滿足不斷變化的需求。
  3. 資料可觀察性對於建立資料信任至關重要,能夠及時發現問題並快速定位。
  4. 在推進進階資料應用之前,必須打好基礎,例如適時引入資料分析師,以充分利用資料。
  5. 建立資料驅動的文化比技術堆積疊的建設更為重要,文化是實作資料驅動的根本。

資料網格與分散式架構的未來

隨著越來越多的組織採用資料網格和分散式架構,創新、效率和可擴充套件性的機會將變得更加廣泛。然而,成功實施資料網格不僅需要技術和流程的支援,更需要企業文化的轉變。成為資料驅動的企業始終始於並終於文化。

使中繼資料為業務服務

在過去的十年中,資料團隊在收集大量資料方面變得越來越熟練。然而,單純的資料收集並不足以驅動數位創新和智慧決策。企業需要理解和利用資料,而這正是中繼資料(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 函式接受資料來源和轉換步驟作為輸入,傳回一個包含血統資訊的字典。透過記錄資料的來源和經過的轉換步驟,可以有效地追蹤資料的流轉過程,為資料的理解和使用提供支援。