在客戶關係管理中,構建客戶360檢視對於深入瞭解客戶行為至關重要。本文接續前篇,更深入地探討如何使用TigerGraph圖資料函式庫和GSQL查詢語言實作客戶360檢視中的關鍵查詢功能,包括客戶互動子圖、客戶旅程和相似客戶查詢。這些查詢能幫助企業有效地分析客戶互動模式、旅程軌跡和相似客戶群體,進而最佳化行銷策略和提升客戶體驗。文章將詳細解析GSQL程式碼的邏輯和關鍵步驟,並提供圖表說明,幫助讀者理解如何應用這些技術於實際場景。同時,文章也將探討圖資料函式庫查詢的最佳實踐,以及在智慧推薦、客戶分群和風險控制等方面的未來應用潛力。

圖資料函式庫在客戶360檢視中的應用:TigerGraph實作(續)

探討客戶旅程分析

客戶旅程分析是客戶360檢視中的一個重要方面。透過分析客戶在不同階段的互動行為,可以更好地理解客戶需求並最佳化銷售流程。

客戶旅程階段

  1. 潛在客戶(Lead)階段:此階段的客戶尚未與銷售機會(Opportunity)相關聯。
  2. 接觸(Contact)階段:當潛在客戶被確認為有潛力的買家時,會被轉換為Contact。
  3. 銷售機會(Opportunity)階段:當Contact被認定為有購買意願時,會產生銷售機會。

客戶旅程分析查詢

為了分析客戶旅程,可以使用GSQL編寫查詢來遍歷客戶在不同階段的互動行為。

CREATE QUERY customer_journey_analysis(VERTEX<Contact> contact) FOR GRAPH Customer360 {
  // Contact頂點開始,遍歷相關的LeadOpportunity和CampaignMember
  SeqAccum<VERTEX> @@vertex_accum;
  contact = contact -> (Lead|Opportunity|CampaignMember);
  
  // 傳回遍歷結果
  RETURN @@vertex_accum;
}

#### 內容解密:
1. `CREATE QUERY`陳述式定義了一個名為`customer_journey_analysis`的查詢,接受一個`Contact`型別的頂點作為輸入。
2. `SeqAccum<VERTEX> @@vertex_accum

## 客戶互動子圖查詢實作詳解

在客戶旅程分析中,第一個重要的查詢是客戶互動子圖(Customer Interaction Subgraph)。此查詢能夠找出與特定客戶相關聯的各種商業實體,包括客戶所屬的帳戶(Account)、商機(Opportunity)、行銷活動成員(CampaignMember)以及相關的行銷活動(Campaign)。透過這些實體之間的關聯,可以完整呈現客戶與企業之間的互動全貌。

### 客戶互動子圖的結構解析

客戶互動子圖查詢的核心功能是遍歷圖資料函式庫中的各類別節點及其關聯邊,主要涉及以下四個主要步驟:

1. **取得客戶相關帳戶**:查詢從指定的客戶(Contact)出發,透過`belongs_to`邊找到相關聯的帳戶(Account)節點。
2. **取得客戶相關商機**:透過`Has_Role`邊取得與客戶相關的商機(Opportunity)節點。
3. **取得客戶參與的行銷活動**:透過`is_connected_to`邊取得客戶參與的行銷活動成員(CampaignMember)節點。
4. **取得行銷活動詳情**:進一步透過`is_part_of`邊取得這些行銷活動成員所屬的行銷活動(Campaign)節點。

#### 程式碼實作與解析

```gsql
CREATE QUERY customer_interactions(VERTEX<Contact> customer) {
  /*
  查詢與指定客戶相關聯的帳戶、商機、行銷活動成員及行銷活動
  示例輸入:
  customer: Sam-Eisenberg
  */
  SetAccum<EDGE> @@edges_to_display; // 定義全域累加器儲存需要顯示的邊
  cust = { customer }; // 建立初始頂點集
  
  // 取得客戶相關聯的帳戶
  accts = SELECT t FROM cust:s -(belongs_to>:e)- Account:t
          ACCUM @@edges_to_display += e;
  
  // 取得客戶相關聯的商機
  opps = SELECT t FROM cust:s -(Has_Role>:e)- Opportunity:t
         ACCUM @@edges_to_display += e;
  
  // 取得客戶相關聯的行銷活動成員
  campMems = SELECT t FROM cust:s -(is_connected_to>:e)- CampaignMember:t
             ACCUM @@edges_to_display += e;
  
  // 取得行銷活動成員所屬的行銷活動
  campaigns = SELECT t FROM campMems:s -(is_part_of>:e)- Campaign:t
              ACCUM @@edges_to_display += e;
  
  // 合併所有相關頂點並輸出結果
  interactions = accts UNION opps UNION campMems UNION campaigns;
  PRINT cust, interactions;
  PRINT @@edges_to_display;
}

#### 內容解密:

  1. 查詢定義CREATE QUERY customer_interactions(VERTEX<Contact> customer)定義了一個名為customer_interactions的GSQL查詢,該查詢接受一個Contact型別的頂點作為輸入引數。
  2. 累加器使用SetAccum<EDGE> @@edges_to_display;定義了一個全域累加器@@edges_to_display,用於儲存遍歷過程中遇到的邊,以便最終輸出完整的子圖。
  3. 遍歷邏輯:查詢使用多個SELECT陳述式從客戶頂點出發,遍歷不同型別的邊到達相關的目標頂點,每一步都將遍歷到的邊累加到@@edges_to_display中。
  4. 結果輸出:最終,查詢將客戶頂點、所有相關頂點以及遍歷到的邊一起輸出,完整呈現客戶互動子圖。

客戶旅程查詢實作詳解

客戶旅程查詢(Customer Journey Query)旨在找出特定客戶在某段時間範圍內與哪些行銷活動成員(CampaignMember)進行了互動。與客戶互動子圖不同,客戶旅程查詢傳回的是按時間排序的行銷活動成員列表,而非完整的子圖。

程式碼實作與解析

CREATE QUERY customer_journey(VERTEX<Contact> customer, DATETIME start_time, DATETIME end_time) {
  /*
  查詢客戶在指定時間範圍內參與的行銷活動
  */
  ListAccum<CampaignMember> @@journey_list; // 定義列表累加器儲存行銷活動成員
  
  // 取得客戶在指定時間範圍內互動的行銷活動成員
  campMems = SELECT t FROM customer:s -(is_connected_to>:e)- CampaignMember:t
             WHERE e.interaction_time >= start_time AND e.interaction_time <= end_time
             ACCUM @@journey_list += t;
  
  // 按互動時間排序行銷活動成員
  @@journey_list = @@journey_list.sort();
  
  PRINT @@journey_list;
}

#### 內容解密:

  1. 查詢定義CREATE QUERY customer_journey(VERTEX<Contact> customer, DATETIME start_time, DATETIME end_time)定義了一個接受客戶頂點和起止時間的查詢。
  2. 時間篩選:使用WHERE子句對互動時間進行篩選,確保只傳回指定時間範圍內的互動記錄。
  3. 排序輸出:使用ListAccumsort()方法對結果進行排序,最終輸出按互動時間排序的行銷活動成員列表。

相似客戶查詢實作詳解

相似客戶查詢(Similar Contacts Query)利用Jaccard相似度計算方法,找出與指定客戶具有相似行銷活動參與特徵的其他客戶。如果指定客戶成功轉化為付費客戶,此查詢可以幫助找出其他具有相似特徵的潛在客戶。

程式碼實作與解析

CREATE QUERY similar_contacts(VERTEX<Contact> target_contact) {
  /*
  查詢與目標客戶具有相似行銷活動特徵的其他客戶
  */
  SetAccum<VERTEX<Campaign>> @@target_campaigns; // 目標客戶參與的行銷活動
  
  // 取得目標客戶參與的行銷活動
  @@target_campaigns = SELECT t FROM target_contact -(is_connected_to>:e1)- CampaignMember:e1.to_vertex -(is_part_of>:e2)- Campaign:t;
  
  // 計算其他客戶與目標客戶的Jaccard相似度
  contacts = SELECT t FROM Contact:t -(is_connected_to>:e1)- CampaignMember:e1.to_vertex -(is_part_of>:e2)- Campaign:c
              WHERE c IN @@target_campaigns
              HAVING Jaccard_similarity(@@target_campaigns, SetAccum<VERTEX<Campaign>>(c)) > 0.5;
  
  PRINT contacts;
}

// Jaccard相似度計算函式
CREATE FUNCTION Jaccard_similarity(SetAccum<VERTEX<Campaign>> set1, SetAccum<VERTEX<Campaign>> set2) {
  RETURN size(set1 INTERSECT set2) / size(set1 UNION set2);
}

#### 內容解密:

  1. 目標客戶行銷活動收集:首先收集目標客戶參與的所有行銷活動,儲存在@@target_campaigns累加器中。
  2. 相似度計算:透過遍歷所有客戶,篩選出參與了目標客戶相關行銷活動的客戶,並使用Jaccard相似度函式計算相似度。
  3. 結果輸出:最終輸出與目標客戶相似度較高的其他客戶列表。

GSQL查詢結構與累加器機制詳解

GSQL查詢結構特點

GSQL查詢是一種具有引數化功能的程式,主要由一系列SELECT陳述式組成,用於在圖資料函式庫中進行遍歷和分析。每個SELECT陳述式的輸入和輸出都是頂點集變數,最終的查詢結果透過PRINT陳述式顯式指定。

累加器機制解析

累加器(Accumulator)是GSQL語言的獨特特性,用於在遍歷過程中累積和處理資料。常見的累加器型別包括:

  • SetAccum:用於儲存唯一值的集合,支援+=運算元。
  • ListAccum:用於儲存有序列表,支援+=sort()等操作。
  • SumAccum:用於累積數值,常用於計數。

累加器支援平行處理,能夠在多執行緒環境下正確累積資料,是GSQL高效處理大規模圖資料的重要基礎。

圖資料函式庫查詢最佳實踐

  1. 明確查詢目標:在編寫GSQL查詢前,明確需要查詢的目標資訊和遍歷路徑。
  2. 合理使用索引:利用圖資料函式庫的索引機制,最佳化查詢效能。
  3. 最佳化遍歷深度:避免過深的遍歷深度,必要時使用LIMIT限制結果數量。
  4. 充分利用累加器:使用合適的累加器型別,提高資料處理效率。

透過以上最佳實踐,可以有效提升GSQL查詢的效能和可維護性,更好地支援複雜的圖資料分析需求。

隨著企業對客戶資料的深入挖掘和分析需求不斷增加,圖資料函式庫和GSQL查詢語言將在以下幾個方面展現更廣泛的應用前景:

  1. 智慧推薦系統:利用客戶行為資料和圖資料函式庫的關聯分析能力,實作更精準的產品和服務推薦。
  2. 客戶分群與精準行銷:透過對客戶特徵的深度分析,進行精準的分群和定向行銷。
  3. 風險控制與反欺詐:利用圖資料函式庫的關聯分析能力,識別潛在的風險和欺詐行為。

這些應用將進一步推動企業在客戶關係管理和精準行銷方面的創新和發展。

圖表翻譯:客戶互動子圖結構示意圖

此圖示展示了客戶互動子圖的主要結構,包括客戶(Contact)、帳戶(Account)、商機(Opportunity)、行銷活動成員(CampaignMember)以及行銷活動(Campaign)之間的關聯。透過這些實體之間的邊,可以完整呈現客戶與企業之間的互動全貌。

圖表翻譯:客戶旅程查詢流程圖

此圖示詳細展示了客戶旅程查詢的處理流程,包括客戶頂點的遍歷、時間篩選條件的應用以及最終的結果排序輸出。

圖表翻譯:相似客戶查詢邏輯示意圖

此圖示闡述了相似客戶查詢的核心邏輯,包括目標客戶行銷活動的收集、其他客戶相似度的計算以及最終的結果輸出。透過Jaccard相似度計算,能夠有效找出與目標客戶具有相似特徵的其他客戶。

圖資料函式庫查詢語言GSQL在客戶旅程分析中的應用

客戶旅程分析查詢實作

客戶旅程分析是瞭解客戶行為模式的重要工具,透過圖資料函式庫查詢語言GSQL(GraphSQL),我們可以有效地分析客戶在不同行銷活動中的參與情況。本章節將探討如何使用GSQL實作客戶旅程分析。

查詢實作:customer_journey

customer_journey查詢用於顯示特定時間範圍內與客戶相關的所有CampaignMember和Account頂點。該查詢接受四個引數:

  1. customer:目標客戶的Contact頂點
  2. campaign_type_set:要包含的行銷活動型別集合
  3. start_time:查詢起始時間
  4. end_time:查詢結束時間
CREATE QUERY customer_journey(VERTEX<Contact> customer,
                              SET<STRING> campaign_type_set, 
                              DATETIME start_time, 
                              DATETIME end_time) {
    // 宣告區域性累加器用於儲存Campaign資訊
    SumAccum<STRING> @cam_type, @cam_name, @cam_desc;

    // 選擇目標客戶所屬的Account
    start = { customer };
    account = SELECT t FROM start -(belongs_to>)- Account:t;

    // 選擇特定時間範圍內與客戶相關的CampaignMember
    campaign_members = 
    SELECT c
    FROM start-(is_connected_to>)- CampaignMember:c
    WHERE c.CreatedDate >= start_time
    AND c.CreatedDate <= end_time;

    // 篩選特定型別的Campaign並收集相關資訊
    CM = 
    SELECT c FROM campaign_members:c -(is_part_of>)- Campaign:t
    WHERE campaign_type_set.size() == 0
    OR t.Campaign_Type IN campaign_type_set
    ACCUM c.@cam_type = t.Campaign_Type,
           c.@cam_name = t.Name,
           c.@cam_desc = t.Description
    ORDER BY c.FirstRespondedDate;

    // 輸出結果
    PRINT customer, CM, account;
}

內容解密:

  1. 引數設定:查詢接受四個引數,分別是客戶頂點、行銷活動型別集合、起始時間和結束時間。
  2. 區域性累加器:使用SumAccum宣告三個區域性累加器,用於儲存Campaign的型別、名稱和描述。
  3. 頂點選擇:首先選擇客戶所屬的Account,然後在指定時間範圍內選擇與客戶相關的CampaignMember。
  4. 資料收集:透過遍歷CampaignMember到Campaign的關係,收集相關的Campaign資訊並排序。
  5. 結果輸出:最終輸出客戶、相關的CampaignMember和Account資訊。

客戶相似度分析

在客戶旅程分析的基礎上,我們進一步探討如何計算客戶之間的相似度。本文介紹根據Jaccard相似度的客戶相似度計算方法。

Jaccard相似度原理

Jaccard相似度是一種衡量兩個集合相似程度的指標,其計算公式為兩個集合交集的大小除以並集的大小。在圖資料函式庫的場景中,我們可以用它來衡量兩個客戶參與行銷活動的相似程度。

相似客戶分析實作

  1. 確定比較屬性:我們選擇客戶參與的行銷活動集合作為比較的屬性。
  2. 計算Jaccard相似度:透過計算兩個客戶所參與行銷活動集合的Jaccard相似度來評估他們的相似程度。
// 計算兩個客戶的Jaccard相似度
CREATE QUERY jaccard_similarity(VERTEX<Contact> customer1, VERTEX<Contact> customer2) {
    // 取得客戶1參與的行銷活動
    SetAccum<VERTEX<Campaign>> campaigns1 = SELECT t FROM customer1 -(is_connected_to>)- CampaignMember:c -(is_part_of>)- Campaign:t;
    
    // 取得客戶2參與的行銷活動
    SetAccum<VERTEX<Campaign>> campaigns2 = SELECT t FROM customer2 -(is_connected_to>)- CampaignMember:c -(is_part_of>)- Campaign:t;
    
    // 計算交集和並集
    INT intersection_size = campaigns1 INTERSECT campaigns2 SIZE;
    INT union_size = campaigns1 UNION campaigns2 SIZE;
    
    // 計算Jaccard相似度
    FLOAT similarity = (FLOAT)intersection_size / union_size;
    
    PRINT similarity;
}

內容解密:

  1. 客戶行銷活動收集:分別收集兩個客戶參與的行銷活動集合。
  2. 交集與並集計算:計算兩個客戶行銷活動集合的交集和並集大小。
  3. 相似度計算:使用Jaccard相似度公式計算兩個客戶的相似程度。
  4. 結果輸出:輸出計算得到的相似度數值。

圖表視覺化呈現

為了更直觀地展示客戶旅程和客戶之間的關係,我們可以使用GraphStudio的視覺化功能。

  graph LR
    A[客戶] -->|belongs_to|> B[Account]
    A -->|is_connected_to|> C[CampaignMember]
    C -->|is_part_of|> D[Campaign]

圖表翻譯: 此圖示展示了客戶旅程分析中的主要實體關係,包括客戶與Account的隸屬關係、客戶與CampaignMember的關聯,以及CampaignMember隸屬於Campaign的關係。