Uber如何處理和使用乘客數據改善App的體驗?

{"type":"doc","content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"italic"},{"type":"color","attrs":{"color":"#333333","name":"user"}},{"type":"strong"}],"text":"本文最初發佈於Uber工程博客,由InfoQ中文站翻譯並分享。"}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"前言"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"數據對於我們的產品而言至關重要。數據分析幫助我們爲使用我們服務的用戶提供了流暢的體驗。它也讓工程師、產品經理、數據分析師、數據科學家可以在瞭解情況後作出明智的決定。數據分析影響了App的每一個界面:在主界面上顯示什麼,產品以什麼順序顯示,向用戶顯示哪些相關的信息,什麼妨礙了用戶乘車或註冊,諸如此類。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"如此大的用戶羣體,如此廣泛的特性,還要覆蓋所有的地理區域,這是一個很複雜的問題。而且,我們的App一直在推出新產品,這就要求底層的技術也要有足夠的靈活性來支持這種發展。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"數據是實現這種發展的最基本工具。本文將聚焦乘客數據:我們如何收集和處理以及這些數據具體如何影響了乘客端App的改進。"}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"乘客數據"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"乘客數據包含了乘客與Uber乘客端App的所有交互。其中每天都會有來自Uber在線系統的數十億個事件,這些事件轉換成了數百張Apache Hive 表,爲乘客端App的不同應用場景提供支持。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"下面是可以利用乘客數據分析的主要問題領域:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"增加漏斗轉化"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"提高用戶參與度"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"個性化"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"用戶溝通"}]}]}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"在線數據收集"}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"移動事件日誌"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"乘客數據有多個來源,但最基本的一個是獲取用戶與App的交互過程。用戶交互是通過移動端的事件日誌獲取的。下面是日誌架構設計的一些關鍵原則:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"日誌標準化"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"跨平臺一致性(iOS、Android、Web)"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"尊重用戶隱私設置"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"優化網絡使用"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"可靠但不降低用戶體驗"}]}]}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"日誌標準化"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"有一個標準的日誌記錄過程很重要,因爲數以百計的工程師在增加或編輯事件。從客戶端收集的日誌有的是平臺化的(像用戶與UI元素的交互事件、內容曝光次數等),有的是由開發人員手動添加的。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"我們將一組元數據進行了標準化,作爲默認的公共負載隨每個事件發送,如位置、App版本、設備、暱稱等。這對於後臺指標計算至關重要。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"此外,爲了確保所有事件跨所有平臺都能保持一致,並且有標準的元數據,我們定義了Thrift結構,事件模型需要實現這個結構來定義其有效負載。Thrift模式包含一個枚舉(表示在不同平臺上的事件ID)和一個有效負載結構(定義了事件註冊時與之關聯的所有數據),最後還有一個事件類型。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.infoq.cn\/resource\/image\/b8\/56\/b8c5b31b70fee25104247b0f33173e56.jpg","alt":null,"title":"","style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":"","fromPaste":false,"pastePass":false}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":"center","origin":null},"content":[{"type":"text","marks":[{"type":"italic"}],"text":"示例:Thrift 模式中分析事件的標準化定義"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":" "}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"發佈日誌"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"這些日誌通過管道進入Unified Reporter,這是客戶端裏的一個框架,用於攝取客戶端產生的所有消息。Unified Reporter會將消息存儲在隊列中,對它們進行聚合,然後通過網絡每隔幾秒分批次地發送給後臺的Event Processor。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.infoq.cn\/resource\/image\/ac\/f4\/ac089866bebbe0249d2f92407f2158f4.jpg","alt":null,"title":"","style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":"","fromPaste":false,"pastePass":false}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":"center","origin":null},"content":[{"type":"text","marks":[{"type":"italic"}],"text":"圖1 事件被記錄到儀表盤和數據集的過程"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"事件一直在增加或變化——每天處理的事件有幾百種類型。其他日益嚴重的問題還有:跨不同操作系統(Android和iOS)的日誌平臺化、可發現性以及如何保持良好的信噪比。Event Manager門戶負責管理這些事件的元數據,併爲事件選擇合適的接收器。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"Event Processor根據接收到的元數據確定如何處理事件以及進一步傳播。此外,如果事件的元數據和映射不可用,Event Processor就會阻擋該事件,不再向下游傳播。這是爲了提升信噪比。"}]},{"type":"heading","attrs":{"align":null,"level":3},"content":[{"type":"text","text":"後臺事件日誌"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"伴隨用戶交互,我們要記錄App向用戶展示了什麼內容,這很重要。我們是通過在後臺記錄服務層的數據來實現的。後臺日誌記錄處理的數據更多,有些是移動端沒有的,有些是移動端處理不過來的。由移動端或其他系統發起的每次後端調用都會有數據記錄。每條記錄都有一個”join“鍵,通過它可以關聯到移動端交互。這項設計可以保證移動端帶寬得到有效使用。"}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"離線數據處理"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"我們把從移動端和服務層收集到的數據進行結構化,並作爲離線數據集進行復制。離線數據集幫助我們識別上文提到的問題,並評估爲解決這些問題所開發的解決方案有多成功。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"原始的大型離線數據集真得很難處理。我們對原始數據進行擴充並建模,形成分層表。在擴充過程中,我們把不同的數據集連接在一起,讓數據更有意義。建模形成的表可以帶來以下幾個方面的好處:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"numberedlist","attrs":{"start":null,"normalizeStart":1},"content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":1,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"italic"}],"text":"節省資源"},{"type":"text","text":":僅計算一次並存儲。其他任何人都不需要在原始的大型數據集上運行查詢。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":2,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"italic"}],"text":"標準化定義"},{"type":"text","text":":業務邏輯和指標定義都在ETL中(提取、轉化、加載),不需要消費者操心。如果把這項工作留給消費者,那麼每個團隊可能會做不同的計算。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":3,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"italic"}],"text":"數據質量"},{"type":"text","text":":可以保證適當的檢查對比,因爲邏輯都在一個地方,數據很容易檢驗。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":4,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"italic"}],"text":"所有權"},{"type":"text","text":":隨着數據演化,數據所有者可以確保表能夠適用於新特性。"}]}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.infoq.cn\/resource\/image\/4e\/db\/4e51354c9c9002ce7b562f943ee551db.jpg","alt":null,"title":"","style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":"","fromPaste":false,"pastePass":false}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":"center","origin":null},"content":[{"type":"text","marks":[{"type":"italic"}],"text":"圖2 各種離線數據處理場景"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"讓我們考慮一下下面這個問題描述:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"numberedlist","attrs":{"start":null,"normalizeStart":1},"content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":1,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"italic"},{"type":"strong"}],"text":"快捷乘車改善了乘客體驗,促成了更多轉化(出行)嗎?"}]}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"我們從保存了用戶交互和主界面內容的基礎事實表中篩選出與“快捷乘車”相關的信息,並通過與其他多個數據集集成對它進行擴充,進而實現漏斗分析:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"有多少用戶顯示了快捷乘車區域?"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"有多少用戶點擊了其中的一個快捷方式?"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"有多少用戶(來自#2)最終預定了出行?"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"有多少用戶(來自#3)完成了出行?"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"通過快捷乘車流程和普通流程完成出行的主界面曝光比是多少?"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"快捷乘車對於出行預定的總體效果是什麼?"}]}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"italic"}],"text":"2."},{"type":"text","marks":[{"type":"italic"},{"type":"strong"}],"text":" 獎勵計劃對於乘客的作用有多大?"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"爲了找出這個問題的答案,表中應該包含如下數據:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"選擇\/兌換的獎勵"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"未使用或過期的獎勵"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"乘客如何贏得獎勵?"}]}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"還有其他一些有趣的數據點,如:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"獎勵計劃增加了App的總體使用量嗎?"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"支出是否與這項計劃的預算相符?"}]}]}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"link","attrs":{"href":"https:\/\/www.uber.com\/in\/en\/u\/rewards\/","title":null,"type":null},"content":[{"type":"text","text":"獎勵"}]},{"type":"text","text":"可以通過Eats、Rides和其他Uber應用的不同功能進行兌換。一旦用戶在移動端選擇了一項獎勵,就會觸發中心化的獎勵後端服務。它會處理獎勵信息,將每個獎勵選擇行爲記錄爲交易數據。有些獎勵是自動應用的,但有些是促銷驅動的。促銷驅動的獎勵兌換是在另一個促銷系統中處理的。此外,這個系統的構建讓運營或產品團隊能夠根據需要輕鬆添加新的獎勵。我們構建工具來獲取獎勵元數據,這些元數據反過來又流向另一個系統。有個ETL作業會讀取流經不同系統的數據,生成一個獎勵兌換數據模型。此外,這些數據還能幫助財務團隊獲取Uber在獎勵計劃中的開銷,讓人們對這個產品有一個良好的理解。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","marks":[{"type":"italic"}],"text":"3."},{"type":"text","marks":[{"type":"italic"},{"type":"strong"}],"text":" 在COVID-19之後,Uber航空出行的恢復率是多少?"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"bulletedlist","content":[{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"航空出行的不同指標是從上游多個表收集的,包括出行、會議、理財、航空出行及其他乘客表等不同的領域。來自不同領域的數據會被聚合,然後在一組維度下計算成指標,存儲到一個表中。將最新數據與經過聚合的歷史數據進行比較,可以幫助我們找到上面這個問題的答案。"}]}]},{"type":"listitem","attrs":{"listStyle":null},"content":[{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"此外,航空出行數據還被用於繪製機場接機的落地數據熱圖,計算機場總接機量、總預定量等。所有這些數據都有助於我們業務的發展,還有助於業務本地化,滿足不同地域的不同需求。"}]}]}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"數據質量"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"數據可以爲我們提供業務決策的依據。因此,保證數據的完整性和質量變得非常重要。在乘客端App的架構中,爲了保證數據質量,我們在多個層面做了數項檢查。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"在產生事件的時候,我們引入了測試框架進行構建時測試、模式和語義檢查。這些框架會檢查是否有分析事件被觸發,有效負載、順序是否符合預期。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.infoq.cn\/resource\/image\/b5\/f3\/b5e5f4600bca82d63ca71e28d4767ef3.jpg","alt":null,"title":"","style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":"","fromPaste":false,"pastePass":false}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":"center","origin":null},"content":[{"type":"text","marks":[{"type":"italic"}],"text":"圖3 數據流數據質量檢查"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"一旦事件到達離線存儲並處理,異常檢測功能就可以保證數據被記錄並按照預期流轉。系統會監控事件量,如果突然出現下降或峯值,就給所有者發送告警信息。這種監控有助於捕捉差異,防止出現中斷而沒有發現。在離線建模的表中,測試框架被用於確保數據的正確性、覆蓋率以及各表之間的一致性。每次管道運行都會觸發配置好的測試,保證產生的任何數據都能滿足質量SLA(服務水平協議)。"}]},{"type":"heading","attrs":{"align":null,"level":2},"content":[{"type":"text","text":"Uber乘客端App的演進"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"根據上面這些從數據收集機制中瞭解到的東西,我們對乘客端App做了一些更改,下面是幾個具體的例子:"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"image","attrs":{"src":"https:\/\/static001.infoq.cn\/resource\/image\/b7\/44\/b73dc73c7fe949a2a1c55fyyc9f31a44.jpg","alt":null,"title":"","style":[{"key":"width","value":"75%"},{"key":"bordertype","value":"none"}],"href":"","fromPaste":false,"pastePass":false}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":"center","origin":null},"content":[{"type":"text","marks":[{"type":"italic"}],"text":"並非所有特性在所有市場中都可用"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":" "}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"高質量的數據是推動應用程序演進的強大工具。不說別的,它可以幫助我們改善用戶體驗,這反過來又增加了用戶粘度,促進了用戶增長。此外,在添加新特性的時候,數據可以告訴我們什麼最適合用戶,保證更改不會導致用戶體驗下降。我們深刻理解數據的重要性,"},{"type":"link","attrs":{"href":"https:\/\/eng.uber.com\/ubers-journey-toward-better-data-culture-from-first-principles\/","title":null,"type":null},"content":[{"type":"text","text":"我們一直在提升Uber的數據文化"}]},{"type":"text","text":"。"}]},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null}},{"type":"paragraph","attrs":{"indent":0,"number":0,"align":null,"origin":null},"content":[{"type":"text","text":"查看英文原文:"},{"type":"link","attrs":{"href":"https:\/\/eng.uber.com\/how-data-shapes-the-uber-rider-app\/","title":null,"type":null},"content":[{"type":"text","text":"How Data Shapes the Uber Rider App"}]}]}]}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章