Menu
ESC

Nhập từ khóa để tìm kiếm

↑↓ Di chuyển
Enter Mở
ESC Đóng

Đang tải...

Bài 5 — Mixpanel Deep Dive: Setup + Concepts

Product Analytics Mixpanel and Amplitude Bài 5/60

Mở đầu — vì sao bài này quan trọng

Ở Bài 4, chúng ta đã có cái nhìn tổng quan về "bức tranh" các công cụ product analytics. Bây giờ là lúc xắn tay áo và đi sâu vào công cụ đầu tiên — cũng là một trong hai "ông lớn" mà bạn sẽ dùng nhiều nhất trong sự nghiệp PM: Mixpanel.

Tại sao lại bắt đầu bằng Mixpanel? Bởi vì Mixpanel là công cụ dạy bạn tư duy về dữ liệu sản phẩm một cách rõ ràng nhất. Nó xây dựng trên một mô hình dữ liệu cực kỳ mạch lạc: mọi thứ đều xoay quanh Event (hành động của người dùng) và User Profile (người dùng là ai). Khi bạn hiểu thật vững hai khối gạch nền tảng này, bạn sẽ hiểu được 90% cách mà bất kỳ công cụ analytics nào vận hành — kể cả Amplitude, PostHog hay GA4.

Điều tôi muốn bạn nhớ ngay từ đầu: Mixpanel không tự động biết gì về sản phẩm của bạn. Nó là một "cuốn sổ trắng" chờ bạn ghi vào. Nếu bạn ghi cẩu thả — đặt tên event lung tung, thiếu property, gửi trùng — thì sau này dù có làm funnel hay retention đẹp đến mấy, số liệu vẫn sai. "Rác vào thì rác ra" (garbage in, garbage out). Vì vậy bài này tập trung vào phần nền móng: setup đúng và hiểu đúng ba khái niệm cốt lõi. Làm chủ được đây, những bài phân tích nâng cao phía sau sẽ nhẹ nhàng hơn rất nhiều.

Khái niệm cốt lõi

Mixpanel được xây dựng trên ba khái niệm bạn phải thuộc nằm lòng: Event, User Profile, và Cohort. Cùng với đó là hai khái niệm bổ trợ quan trọng — PropertySuper Property. Hãy đi từng cái một.

Event — hành động của người dùng

Event là đơn vị dữ liệu cơ bản nhất trong Mixpanel. Mỗi khi người dùng làm gì đó trong sản phẩm — mở app, xem sản phẩm, thêm vào giỏ, thanh toán — bạn gửi một event lên Mixpanel để ghi lại.

Một event luôn có ba thành phần:

  • Tên event (event name): mô tả hành động, ví dụ Product Viewed, Checkout Completed.
  • Timestamp: thời điểm hành động xảy ra (Mixpanel tự gắn nếu bạn không truyền).
  • Distinct ID: mã định danh của người dùng thực hiện hành động — để Mixpanel biết event này thuộc về ai.
Về mặt code, gửi một event trong Mixpanel đơn giản như sau:

mixpanel.track("Product Viewed", {
  product_id: "SP-10293",
  product_name: "Kem chống nắng Anessa",
  category: "Skincare",
  price: 520000,
  currency: "VND"
});

Ở đây "Product Viewed" là tên event, còn object {...} phía sau chính là properties của event — dữ liệu ngữ cảnh mô tả chi tiết của hành động đó. Property là thứ làm cho event trở nên có giá trị phân tích. Chỉ biết "có người xem sản phẩm" thì gần như vô dụng; biết "họ xem sản phẩm nào, giá bao nhiêu, thuộc danh mục gì" mới cho phép bạn trả lời những câu hỏi kinh doanh thực sự.

User Profile — người dùng là ai

Trong khi Event trả lời câu hỏi "chuyện gì đã xảy ra?", thì User Profile trả lời câu hỏi "người này là ai?". Đây là hồ sơ lưu các thuộc tính bền vững gắn với từng người dùng: tên, email, gói dịch vụ, ngày đăng ký, thành phố, vòng đời (mới/đang hoạt động/rời bỏ)...

Bạn cập nhật User Profile bằng lệnh people.set:

mixpanel.people.set({
  "$name": "Nguyễn Văn An",
  "$email": "an.nguyen@example.com",
  "plan": "Premium",
  "city": "Hồ Chí Minh",
  "signup_date": "2026-01-15"
});

Điểm khác biệt cốt lõi cần nắm: Event property mô tả một hành động tại một thời điểm; còn Profile property mô tả trạng thái hiện tại của con người. Một event Order Placed với order_value: 1.200.000đ là bất biến — nó đã xảy ra và không đổi. Ngược lại, profile property plan có thể thay đổi từ "Free" sang "Premium" khi người dùng nâng cấp, và Mixpanel chỉ giữ giá trị mới nhất.

Những property có tiền tố $ như $name, $email là các reserved property — Mixpanel hiểu và hiển thị chúng đặc biệt trên giao diện (ví dụ tự hiện avatar theo email).

Super Property — thông tin đính kèm mọi event

Super Property là một khái niệm khiến nhiều bạn mới nhầm với Profile property, nên tôi tách riêng để làm rõ. Super Property là những property mà bạn muốn tự động đính kèm vào MỌI event kể từ khi set, mà không phải gõ lại thủ công mỗi lần track.

Ví dụ, bạn muốn mọi event đều biết người dùng đang dùng gói nào và trên nền tảng nào:

mixpanel.register({
  "plan": "Premium",
  "platform": "iOS",
  "app_version": "3.4.1"
});

Sau lệnh register này, mọi event track sau đó sẽ tự động có kèm plan, platform, app_version. Nhờ vậy bạn có thể lọc funnel "chỉ tính người dùng iOS" hay so sánh hành vi giữa gói Free và Premium mà không cần gắn thủ công vào từng event.

Phân biệt nhanh: Super Property được lưu ở phía client (thường trong cookie/local storage) và gắn vào event tại thời điểm gửi; còn Profile property được lưu trên server của Mixpanel và gắn với con người. Một quy tắc thực dụng: cái gì bạn cần để lọc và phân tích event thì để làm super property; cái gì mô tả bản chất con người để nhắm mục tiêu và cá nhân hóa thì để làm profile property. Nhiều thuộc tính (như plan) thường được set ở cả hai nơi.

Cohort — nhóm người dùng theo tiêu chí

Cohort là một nhóm người dùng được định nghĩa bởi tiêu chí bạn đặt ra — có thể dựa trên profile property, dựa trên hành vi (đã/chưa làm event nào đó), hoặc kết hợp cả hai.

Ví dụ các cohort thường gặp:

  • "Người dùng ở Hà Nội đã đăng ký trong 30 ngày qua nhưng chưa từng đặt đơn hàng nào" — cohort để tìm người cần kích hoạt.
  • "Người dùng gói Premium đã thực hiện Checkout Completed ít nhất 3 lần trong tháng" — cohort khách hàng trung thành.
Điểm mạnh của cohort trong Mixpanel là nó động (dynamic): khi có người dùng mới thỏa điều kiện, họ tự động được thêm vào; khi ai đó không còn thỏa, họ tự rời ra. Cohort chính là cầu nối giữa phân tíchhành động — bạn có thể đồng bộ cohort sang công cụ email/push để chạy chiến dịch nhắm đúng nhóm. Ở Bài 11 chúng ta sẽ đào sâu cách xây cohort; ở đây bạn chỉ cần hiểu bản chất: cohort là "tập người dùng có chung đặc điểm", được định nghĩa từ chính Event và Profile mà bạn đã dựng ở trên.

Bạn thấy đấy — ba khái niệm này không rời rạc. Event là nguyên liệu thô, Profile là chân dung con người, và Cohort là cách bạn gom con người lại thành nhóm để hành động. Chúng xếp chồng lên nhau như một kim tự tháp.

Tình huống thực tế

Ví dụ 1 — Sàn TMĐT nội địa dựng nền móng tracking

Một startup TMĐT mỹ phẩm tại TP.HCM (giả định tên "BeautyBox") mới tích hợp Mixpanel. Đội kỹ thuật muốn "track mọi thứ" nên gửi loạn xạ: có nơi đặt tên product_view, nơi khác View Product, nơi khác nữa PDP_open. Sau một tháng, khi PM mở Mixpanel để làm báo cáo, có tới ba event khác nhau cùng mô tả một hành động — không thể gộp lại thành một funnel hoàn chỉnh.

Họ phải làm lại. Lần này họ thống nhất: mỗi hành động chỉ có một tên event, viết theo cấu trúc Đối tượng + Động từ quá khứ (Product Viewed, Cart Updated, Checkout Completed), và mỗi event mang property chuẩn (product_id, price, category). Sau khi làm lại, cùng dữ liệu đó cho ra funnel Product Viewed → Cart Updated → Checkout Completed với tỷ lệ chuyển đổi 41% → 12%, chỉ ra rõ điểm rơi lớn nằm ở bước thêm giỏ.

Bài học: Chi phí lớn nhất của tracking cẩu thả không phải là code sai, mà là một tháng dữ liệu vô dụng. Đặt tên nhất quán ngay từ event đầu tiên.

Ví dụ 2 — App fintech dùng Super Property để phân khúc

Một ví điện tử (giả định "PayViet") muốn so sánh hành vi giữa người dùng iOS và Android, và giữa gói Free và Premium. Ban đầu họ không có super property, nên mỗi lần muốn lọc theo nền tảng, đội data phải join dữ liệu thủ công — rất mất công.

Giải pháp: ngay khi user đăng nhập, họ gọi mixpanel.register({ platform, plan, app_version }). Từ đó, mọi event đều tự mang ba thuộc tính này. Chỉ trong một buổi chiều, PM phát hiện: tỷ lệ hoàn thành Money Transferred của người dùng Premium cao hơn Free tới 2,3 lần, và người dùng iOS gặp lỗi ở bước xác thực OTP nhiều gấp đôi Android. Cả hai insight này trước đây bị "chôn" vì thiếu property.

Bài học: Super property biến dữ liệu phẳng thành dữ liệu phân khúc được. Đầu tư vài dòng register từ sớm giúp bạn trả lời hàng chục câu hỏi phân tích về sau.

Ví dụ 3 — Distinct ID và bài toán "một người, hai thiết bị"

Một nền tảng học trực tuyến nhận thấy số "người dùng" của họ trên Mixpanel phình to bất thường. Điều tra ra: khi khách chưa đăng nhập, Mixpanel gán một distinct_id ẩn danh; sau khi họ đăng nhập trên điện thoại rồi lại vào bằng laptop, mỗi phiên tạo một ID mới. Kết quả: một con người thật bị đếm thành ba, funnel retention bị bóp méo vì "người dùng" đăng ký hôm nay lại xuất hiện như người mới vào hôm sau.

Cách xử lý đúng là gọi mixpanel.identify(userId) ngay sau khi người dùng đăng nhập, để hợp nhất ID ẩn danh với ID thật. Sau khi sửa, số người dùng thực giảm 28% nhưng — quan trọng hơn — retention và funnel trở nên đáng tin.

Bài học: Distinct ID là "linh hồn" của mô hình dữ liệu. Gọi identify đúng thời điểm là một trong những quyết định setup quan trọng nhất, ảnh hưởng đến mọi phân tích sau này.

Hướng dẫn từng bước

Dưới đây là quy trình setup Mixpanel cho một sản phẩm web/app từ con số không:

  • Tạo project và lấy Token. Đăng nhập Mixpanel, tạo một project mới (nên tách riêng project "Development" và "Production" để dữ liệu test không lẫn vào dữ liệu thật). Vào Settings để lấy Project Token — đây là chìa khóa để SDK gửi dữ liệu.
  • Chọn Data Residency. Với người dùng ở Việt Nam/EU, cân nhắc chọn cụm dữ liệu phù hợp (Mixpanel có cụm US và EU). Điều này liên quan đến tuân thủ dữ liệu — chủ đề ta sẽ bàn kỹ ở Bài 28.
  • Cài SDK và khởi tạo. Với web:
   import mixpanel from "mixpanel-browser";
   mixpanel.init("YOUR_PROJECT_TOKEN", {
     debug: true,
     track_pageview: false,
     persistence: "localStorage"
   });
   
  • Gọi identify khi biết danh tính người dùng. Ngay sau khi đăng nhập/đăng ký thành công:
   mixpanel.identify(user.id);
   mixpanel.people.set({ "$email": user.email, "plan": user.plan });
   
  • Đăng ký Super Property cho ngữ cảnh chung.
   mixpanel.register({ platform: "Web", app_version: "3.4.1" });
   
  • Track các event cốt lõi. Bắt đầu nhỏ — chọn 5-8 event quan trọng nhất theo hành trình người dùng (đăng ký, kích hoạt, hành động giá trị, thanh toán), thay vì cố track hàng trăm event ngay lập tức.
  • Kiểm chứng bằng Live View. Vào mục Events → Live View trong Mixpanel để xem event chảy về theo thời gian thực. Thực hiện thao tác trên sản phẩm và xác nhận event xuất hiện đúng tên, đúng property.
  • Ghi lại Tracking Plan. Lập một bảng (Google Sheet là đủ) liệt kê từng event, property, kiểu dữ liệu và ý nghĩa. Đây là "hợp đồng" giữa PM và dev — ta sẽ bàn sâu ở Bài 30.

Lỗi thường gặp & mẹo

  • Đặt tên event không nhất quán. signup, Sign Up, user_signup là ba event khác nhau trong mắt Mixpanel. Chốt một quy ước (khuyến nghị Object Action viết hoa, ví dụ Order Placed) và tuân thủ tuyệt đối.
  • Nhét property vào tên event. Đừng tạo Viewed Skincare, Viewed Makeup. Hãy dùng một event Product Viewed với property category. Property linh hoạt hơn tên event rất nhiều.
  • Quên gọi identify. Đây là lỗi phổ biến nhất, khiến một người bị đếm thành nhiều, làm hỏng retention. Luôn identify ngay sau đăng nhập.
  • Track ở cả môi trường dev lẫn prod chung một project. Dữ liệu test sẽ làm bẩn số liệu thật. Luôn tách token theo môi trường.
  • Gửi property với kiểu dữ liệu lẫn lộn. Lúc thì price: 520000 (số), lúc thì price: "520.000đ" (chuỗi). Mixpanel không thể tính tổng/trung bình trên chuỗi. Chốt kiểu dữ liệu ngay từ đầu.
  • Mẹo — bật debug: true khi phát triển để xem log gửi event trên console, giúp phát hiện sai sót sớm. Nhớ tắt ở production.
  • Mẹo — dùng Lexicon. Mixpanel có công cụ Lexicon để đặt mô tả, ẩn event rác, chuẩn hóa tên hiển thị. Dùng nó để giữ project luôn gọn gàng khi số lượng event tăng lên.

Bài tập thực hành

  • Thiết kế 5 event lõi. Chọn một sản phẩm bạn quen thuộc (một app giao đồ ăn, một sàn TMĐT...). Viết ra 5 event quan trọng nhất theo cấu trúc Object Action, kèm 3-4 property cho mỗi event. Ghi rõ kiểu dữ liệu từng property.
  • Phân loại property. Với sản phẩm đó, liệt kê 6 thuộc tính và xếp mỗi cái vào đúng nhóm: Event property, Super property, hay Profile property. Giải thích ngắn gọn lý do lựa chọn.
  • Viết đoạn khởi tạo. Viết đoạn pseudo-code (hoặc JavaScript) thực hiện đủ: initidentifypeople.setregister super property → track một event lõi.
  • Định nghĩa một Cohort. Mô tả bằng lời một cohort hữu ích cho sản phẩm của bạn (kết hợp cả tiêu chí hành vi lẫn profile property), và nêu bạn sẽ dùng cohort đó để làm gì.

Tóm tắt

Mixpanel xây dựng trên một mô hình dữ liệu tinh gọn nhưng cực mạnh: Event ghi lại hành động của người dùng cùng các property mô tả ngữ cảnh; User Profile lưu trạng thái con người; Super Property tự động đính kèm ngữ cảnh chung vào mọi event; và Cohort gom người dùng thành nhóm để phân tích và hành động. Sợi chỉ xuyên suốt kết nối tất cả là Distinct ID — định danh đúng người dùng, đặc biệt qua lệnh identify, là điều kiện tiên quyết để mọi phân tích về sau chính xác.

Nền móng vững của một Mixpanel setup không nằm ở việc track được nhiều, mà ở việc track được sạch và nhất quán: tên event theo quy ước, property có kiểu dữ liệu rõ ràng, môi trường dev/prod tách bạch, và một tracking plan làm "hợp đồng" chung. Nắm chắc những viên gạch này, bạn đã sẵn sàng bước sang Bài 6 để khám phá Amplitude — và bạn sẽ thấy nhiều khái niệm ở đây lặp lại dưới tên gọi khác.