← quay lại đọcBản in thử6 × 9 in · khổ · trang đối diện26 tr · 5,419 chữ
ii
Maxubrq · GT - Chương VII
Community detection, khi cụm tự nổi lên từ dữ liệu
“Thuật toán luôn tìm ra cụm, việc của bạn là biết khi nào cụm đó chỉ là tiếng vọng của nhiễu.”
iii
Maxubrq · GT - Chương VII

Community detection, khi cụm tự nổi lên từ dữ liệu

thuật toán luôn tìm ra cụm, kể cả trên nhiễu
Đội marketing chia khách theo tuổi, vùng, mức chi. Dữ liệu hành vi vẽ ra những cụm không trùng với bất kỳ cột nào: dân câu cá và dân cắm trại là một cộng đồng, dân gym tách làm ba. Cụm có thật, nhưng thuật toán tìm cụm thì không bao giờ nói "ở đây không có gì", và kỹ năng thật nằm ở vòng nghi ngờ sau khi nó trả lời.
bởi maxubrq
tháng 6 năm 2026
Community detection, khi cụm tự nổi lên từ dữ liệu

Những cụm không ai đặt tên

Một sàn thương mại điện tử cỡ vừa, đầu quý, đội marketing họp để chuẩn bị chiến dịch lớn nhất năm. Việc đầu tiên, như mọi năm, là chia tập khách hàng thành các phân khúc để may đo thông điệp. Cách làm quen tay và hợp lý: chia theo thuộc tính. Độ tuổi, khu vực, mức chi tiêu trung bình ba tháng. Bảng phân khúc ra đời, mỗi ô có tên, có persona minh hoạ, có cả ảnh stock một người đang cười. Khách trẻ thành thị chi tiêu cao. Khách gia đình ngoại thành. Khách thể thao. Không ai trong phòng thấy có gì để bàn, vì bảng này năm nào cũng trông như vậy.

Trong lúc đó, một analyst trong đội data làm một việc không ai yêu cầu. Bạn ấy không nhìn vào các cột thuộc tính, mà nhìn vào hành vi: ai mua sản phẩm gì, ai xem gì trong cùng phiên với gì. Từ đó dựng một mạng lưới, khách hàng nối với nhau qua những sản phẩm họ cùng chạm vào, không một thuộc tính nhân khẩu nào tham gia. Rồi bạn ấy để cấu trúc tự nói.

Cái hiện ra không khớp với bất kỳ ô nào trong bảng phân khúc. Người mua đồ câu cá và người mua đồ cắm trại dính thành một khối, dù tuổi rải từ hai mươi đến sáu mươi, vùng rải từ thành phố ra biển. Người mua đồ gym, cái ô "khách thể thao" gọn gàng kia, tách thành ba đám gần như không chạm nhau, mà mãi sau này mới hiểu là ba văn hoá tập khác hẳn: một đám sống quanh tạ và đạm, một đám quanh thảm và nến thơm, một đám quanh giày chạy và đồng hồ GPS. Các cụm hiện ra rõ đến mức nhìn vào là thấy, chúng dính lấy nhau theo một cách không nằm trong bất kỳ bảng phân loại nào của công ty, nhưng không cột nào trong database gọi tên được chúng.

Phòng họp chia làm hai phản ứng, và cả hai đều đúng một nửa. Phía hào hứng nói đây mới là phân khúc thật, chia theo điều người ta làm thay vì theo điều người ta khai. Phía nghi ngờ hỏi một câu chí mạng: làm sao biết mấy đám này có thật? Dữ liệu nào cũng có vân hoa, thuật toán nào chạy trên dữ liệu nào mà chẳng vẽ ra được vài hình thù trông như có nghĩa.

Bài toán này có hai nửa, và nửa sau khó hơn nửa trước. Nửa trước: làm sao để cấu trúc nhóm tự lộ ra khi không ai định nghĩa trước được nhóm là gì. Nửa sau: làm sao biết cái vừa lộ ra là cấu trúc, chứ không phải ảo ảnh. Loại bài toán này có tên, community detection°, và chương này dạy cả hai nửa. Nó cũng sẽ nói một điều ít sách nói thẳng: ai chỉ học nửa đầu thì nguy hiểm hơn người không học gì.

Giống nhau và thuộc về nhau

Phản xạ chuẩn mực trước bài toán phân nhóm, và phản xạ này xứng đáng được kể bằng sự tôn trọng, là clustering trên thuộc tính. Gom mỗi khách hàng thành một vector, tuổi, mức chi, tần suất mua, rồi cho thuật toán gom những điểm gần nhau lại, k-means và họ hàng của nó. Đây là công cụ được dạy trong mọi khoá machine learning, có sẵn trong mọi thư viện, chạy nhanh, và với rất nhiều bài toán nó chính là câu trả lời đúng. Người chọn nó không làm sai.

Nó đủ khi thuộc tính thực sự mang thông tin nhóm. Phân khúc theo mức chi để định giá, theo vùng để tính logistics, theo tần suất để chăm sóc khách sắp rời bỏ, những cách chia này đứng vững vì câu hỏi business của chúng đúng là câu hỏi về thuộc tính. Nó cũng đủ khi nhóm cần giải thích được bằng các cột có sẵn cho đội vận hành, hoặc khi dữ liệu quan hệ đơn giản là không tồn tại. Nói thẳng phần này, vì phần tiếp theo không phải là một bài đánh người rơm.

Chỗ gãy nằm ở một ví dụ vẽ được trong đầu. Hai khách hàng giống nhau gần như tuyệt đối trên mọi cột, cùng tuổi, cùng thành phố, cùng mức chi, nhưng một người sống trong thế giới đồ câu, người kia sống trong thế giới phụ kiện máy ảnh, hai vũ trụ sản phẩm không giao nhau. Ngược lại, hai người khác nhau mọi cột nhân khẩu, một sinh viên và một kỹ sư về hưu, lại mua chung một vũ trụ đồ leo núi. Giống nhau là quan hệ giữa các thuộc tính của từng điểm. Thuộc về nhau là quan hệ trong cấu trúc kết nối giữa các điểm. Hai hệ toạ độ khác nhau về bản chất, không phải về độ phân giải, và không lượng feature engineering nào biến hệ này thành hệ kia.

Chia theo giống nhauChia theo kết nối
Đầu vàoThuộc tính của từng phần tửQuan hệ giữa các phần tử
Nhóm đến từ đâuĐịnh nghĩa trước, hoặc khoảng cách trong không gian thuộc tínhTự nổi lên từ cấu trúc
Câu hỏi trả lờiAi giống aiAi thuộc về ai
Công cụ tiêu biểuk-means và họ hàngCommunity detection

Điều đáng nói hơn cả chuyện công cụ là chuyện cái bẫy nằm ở tầng đặt câu hỏi. K-means thường được chọn không phải vì ai đó đặt hai câu hỏi cạnh nhau rồi cân nhắc, mà vì dữ liệu thuộc tính nằm sẵn trong bảng, còn dữ liệu quan hệ phải dựng. Câu hỏi bị quyết định bởi hình dạng của dữ liệu có sẵn, thay vì bởi điều business thật sự muốn biết. Mình từng chứng kiến nhiều bản phân khúc được bảo vệ hăng say trong phòng họp, mà lý do sâu xa nhất cho sự tồn tại của chúng là chúng tính được bằng những cột đã có.

a question

Với dữ liệu bạn đang quản lý, nếu chia một lần theo giống nhau và một lần theo kết nối, bạn đoán hai bản đồ sẽ trùng nhau bao nhiêu phần?

answer.Không có con số đúng, nhưng có một quy luật đáng nhớ: hai bản đồ càng trùng nhau, dữ liệu quan hệ càng ít mang thông tin mới và cách chia thuộc tính có sẵn càng đáng giữ; hai bản đồ càng lệch nhau, càng có khả năng tồn tại cấu trúc hành vi mà các cột hiện tại không gọi tên được. Cả hai kết quả đều hữu ích. Điều duy nhất không hữu ích là chưa từng đặt hai bản đồ cạnh nhau.
Nếu bạn không đoán nổi, đó cũng là một câu trả lời: nó nghĩa là tổ chức của bạn chưa từng dựng bản đồ thứ hai, và mọi phân khúc đang dùng đều mặc định rằng giống nhau với thuộc về nhau là một.

Vậy bước đúng không phải là vứt k-means đi, mà là tách hai câu hỏi và biết mình đang hỏi câu nào. Khi câu hỏi đúng là ai thuộc về ai trong mạng lưới, ta cần một định nghĩa cho chữ "thuộc về" đủ chặt để tính được. Và đây là chỗ bài toán trở nên thú vị, vì hoá ra một định nghĩa chặt vẫn không cứu được ta khỏi nghĩa vụ nghi ngờ.

Dày bên trong, thưa ra ngoài

Phân loại truyền thống đi từ định nghĩa đến phần tử: định nghĩa nhóm trước, gán phần tử vào sau. Community detection đi ngược, để cấu trúc kết nối tự lộ nhóm, rồi con người đi tìm nghĩa cho cái đã lộ. Sức mạnh và cạm bẫy của nó là cùng một thứ. Vì không có định nghĩa trước, không có gì ràng buộc thuật toán phải trả lời rằng ở đây không có nhóm nào. Nó luôn trả về một cách chia. Luôn luôn. Cho nên câu hỏi của người dùng nó không phải là cụm ở đâu, mà là cách chia này đáng tin đến đâu.

“

Máy tìm cụm không bao giờ trả lời rằng ở đây không có gì. Câu trả lời đó là việc của bạn.

”

Để hiểu vì sao, cần xem chữ "thuộc về nhau" được làm chặt như thế nào. Định nghĩa được dùng rộng rãi nhất tên là modularity°, và trực giác của nó nằm gọn trong một phép so sánh: một cách chia tốt là cách chia mà các edge bên trong từng cụm dày hơn hẳn mức ta kỳ vọng nếu cũng từng ấy edge được rải ngẫu nhiên giữa cũng từng ấy node. Cả hai vế của phép so đều quan trọng. Dày bên trong, thưa giữa các cụm, đó là vế dễ nhớ. Nhưng vế "so với ngẫu nhiên" mới là vế giữ cho định nghĩa khỏi vô nghĩa, vì nếu không so với ngẫu nhiên thì mọi đám đông đều trông như cụm, kể cả đám đông sinh ra từ việc tung xúc xắc. Modularity là một con số chấm điểm cho một cách chia cụ thể, và bài toán trở thành đi tìm cách chia có điểm cao.

Đi tìm bằng cách nào, khi số cách chia một graph triệu node bùng nổ vượt mọi khả năng duyệt hết? Câu trả lời thực dụng nhất, và phổ biến nhất, là tham lam từng bước. Thuật toán mang tên Louvain làm thế này: mỗi node lần lượt thử chuyển sang cụm của hàng xóm, ở lại nơi nào làm điểm modularity chung tăng nhiều nhất, cứ thế đến khi không node nào còn muốn chuyển nhà nữa, rồi nén mỗi cụm thành một node lớn và lặp lại trò chơi ở tầng trên. Cái đáng kinh ngạc là chi phí: so với độ đo đắt nhất của chương trước, thứ phải tính đường đi giữa mọi cặp node, Louvain rẻ đến mức gần như khó tin, chạy được trên graph hàng trăm triệu edge bằng một máy. Sự rẻ này là lý do nó có mặt ở khắp nơi, và sự có mặt khắp nơi là lý do các cạm bẫy của nó trở thành cạm bẫy của cả ngành.

Louvain: Blondel, Guillaume, Lambiotte, Lefebvre, "Fast unfolding of communities in large networks" (2008). Leiden: Traag, Waltman, van Eck, "From Louvain to Leiden: guaranteeing well-connected communities" (2019), paper chỉ ra Louvain có thể trả về cụm rời rạc bên trong và đề xuất bước tinh chỉnh khắc phục.

Có hai vết nứt phải biết trước khi dùng. Vết thứ nhất mang tên resolution limit: modularity thuần có một cỡ cụm "ưa thích", và cỡ đó phụ thuộc vào cỡ của toàn graph, nghĩa là những cụm nhỏ có thật có thể bị nuốt chửng vào cụm lớn chỉ vì graph quá to. Các cài đặt hiện đại vì thế cho bạn một tham số resolution, một núm vặn chỉnh cỡ cụm. Hãy dừng ở câu này một nhịp, vì nó nói một điều quan trọng hơn vẻ ngoài kỹ thuật của nó: số cụm không phải là sự thật của dữ liệu, nó một phần là lựa chọn của người hỏi. Vết thứ hai thuộc về chính Louvain: thuật toán có thể trả về những cụm mà bên trong chúng không liền mạch, một cụm gồm hai mảnh không nối với nhau, lỗi cấu trúc thật đã được ghi nhận. Đó là lý do Leiden ra đời, cùng trực giác, thêm bước tinh chỉnh bảo đảm mọi cụm đều liên thông, và còn nhanh hơn. Lời khuyên thực dụng gói trong một câu: bài mới thì dùng Leiden, còn hiểu Louvain để đọc được các hệ cũ và hiểu vì sao Leiden tồn tại.

Resolution limit: Fortunato, Barthélemy, "Resolution limit in community detection" (2007). Phát hiện rằng tối ưu modularity thuần không thể nhìn thấy cụm nhỏ hơn một ngưỡng phụ thuộc vào tổng số edge của graph.

Đến đây là hết phần cơ chế, và nếu chương dừng ở đây thì nó đã dạy bạn đúng cái nửa nguy hiểm. Vì mọi thứ vừa kể, modularity, Louvain, Leiden, đều không thay đổi sự thật ban đầu: thuật toán luôn trả về một cách chia. Cái biến cơ chế thành kỹ năng là vòng nghi ngờ chạy sau mỗi lần nó trả lời, ba bước, không bước nào bỏ được.

Bước thứ nhất, đối xử với resolution như một thí nghiệm chứ không phải một lần chạy. Quét vài mức, nhìn cách chia thay đổi thế nào khi vặn núm. Sẽ có những vùng mà mỗi nấc vặn ra một thế giới khác, và những vùng mà cấu trúc đứng yên qua nhiều nấc liền. Vùng đứng yên đáng tin hơn vùng nhảy múa, vì cấu trúc thật thì lì, còn vân hoa của nhiễu thì đổi hình theo từng cách nhìn.

Bước thứ hai, đo độ ổn định. Các thuật toán họ này có yếu tố ngẫu nhiên, thứ tự duyệt node chẳng hạn, nên hãy chạy mười lần với seed khác nhau và hỏi một câu đơn giản: bao nhiêu cặp node vẫn về chung một nhà qua các lần chạy? Phần lõi giữ nguyên qua mười lần là cấu trúc. Phần biên nhảy qua nhảy lại giữa các cụm là vùng mờ, và vùng mờ phải được khai báo là vùng mờ. Bạn đã gặp phản xạ này ở chương trước, với những con số xếp hạng tính bằng xấp xỉ, giờ nó áp cho cách chia.

a question

Nếu chạy lại mười lần mà danh sách thành viên của cụm lớn nhất đổi đi một phần tư, bạn sẽ viết gì lên slide báo cáo?

answer.Một cách viết trung thực: ba phần tư thành viên của cụm này ổn định qua mười lần chạy và là phần đáng hành động; một phần tư còn lại dao động giữa các cụm lân cận và được đánh dấu là vùng biên, không đưa vào quyết định may đo. Cái không được phép viết là con số thành viên chính xác đến từng đơn vị, không kèm một chữ nào về độ ổn định.
Để ý rằng câu trả lời không phải là giấu cụm đi hay chạy thêm đến khi nó đứng yên. Vùng mờ là một sự thật của dữ liệu, và khai báo nó làm báo cáo đáng tin hơn, không kém uy tín đi.

Bước thứ ba, đặt tên. Cầm những cụm đã sống sót qua hai bước trên, kéo người hiểu domain° vào phòng và hỏi: nhóm này là ai? Một cụm đặt tên được, dân câu cá cắm trại, ba văn hoá gym, là một phát hiện. Một cụm mà sau nỗ lực tử tế vẫn không ai đặt tên nổi thì hoặc resolution sai, hoặc edge dựng graph sai, hoặc nó đúng là vân hoa của nhiễu. Đặt tên không phải bước trang trí sau khi phân tích xong. Nó là bài kiểm tra cuối cùng của phân tích.

Quay lại với analyst của chúng ta. Bạn ấy giờ có một quy trình thay vì một bức tranh đẹp: quét resolution, mười lần chạy, và một buổi chiều ngồi với đội marketing để đặt tên từng cụm. Cụm câu cá cắm trại sống sót cả ba bước và nhận một cái tên. Vài cụm nhỏ lung linh trong bản vẽ đầu tiên tan vào nhiễu ngay ở bước hai. Community detection không phải máy phát hiện sự thật, nó là máy đề xuất giả thuyết, và ba bước kia là cách ta đối xử với một giả thuyết. Hai hệ thống thật dưới đây cho thấy điều đó ở quy mô lớn: một nơi giả thuyết tự nổi trở thành xương sống của sản phẩm, một nơi giả thuyết tự nổi được trao vào tay con người để phán quyết.

Các thiên hà âm nhạc

Hệ recommendation âm nhạc cần biết nghệ sĩ nào gần nghệ sĩ nào, và cách chia có sẵn lâu đời nhất là genre. Genre là nhãn do ngành đặt, thừa kế từ thời cửa hàng đĩa cần biết xếp album vào kệ nào, rock một kệ, jazz một kệ, world music cái kệ cho mọi thứ còn lại. Nhìn bằng con mắt của section trước, genre chính là một bảng phân khúc theo thuộc tính: ai đó định nghĩa nhóm trước, rồi gán nghệ sĩ vào.

Các nền tảng streaming, mà Spotify là đại diện được nói đến nhiều nhất, đổi hệ toạ độ. Họ dựng graph nghệ sĩ từ hành vi nghe: hai nghệ sĩ nối với nhau khi được nghe chung trong phiên, khi nằm chung trong playlist người dùng tự tạo. Edge này không hỏi nhạc là gì. Nó chỉ ghi nhạc được nghe cùng gì. Và chọn edge này thay vì edge khác đã là một quyết định mô hình theo đúng nghĩa của chương 3, vì cụm sẽ tự nổi lên từ đúng cái quan hệ đã được chọn, không hơn.

Cái tự lộ ra trên graph đó trông như một bản đồ thiên văn, những thiên hà nghe, đặc chỗ này thưa chỗ kia. Nhiều cụm khớp với genre quen, điều đó không bất ngờ. Phần đáng tiền là phần lệch. Có những vùng nghe vắt ngang các nhãn mà ngành công nghiệp coi là xa nhau, người nghe cứ trộn chúng vào cùng playlist như thể ranh giới kia chưa từng tồn tại. Và có những genre chính thức, nhìn từ hành vi, tách thành nhiều cộng đồng nghe gần như không chạm nhau, đúng motif ba văn hoá gym của đầu chương, lần này ở quy mô hàng trăm triệu người nghe. Cấu trúc nghe thật khác cấu trúc mà ngành công nghiệp âm nhạc nghĩ về chính nó, và độ lệch đó không phải lỗi dữ liệu. Nó chính là giá trị.

Hệ phân loại nghe của Spotify đứng trên nền tảng của The Echo Nest (được Spotify mua lại năm 2014). Bản đồ thể loại Every Noise at Once của Glenn McDonald, dựng từ chính dữ liệu này, từng là cửa sổ công khai nhìn vào các "thiên hà nghe": hơn sáu nghìn micro-genre được đặt tên, phần lớn không có trong bất kỳ kệ đĩa nào.

Nhưng để cấu trúc đó thành sản phẩm, phải đi qua đúng bước thứ ba của vòng nghi ngờ. Một cụm nghệ sĩ tự nổi chỉ là một đám điểm cho đến khi nó được diễn giải, và phần việc này con người làm: đặt tên cho các vùng nghe, hàng nghìn cái tên, có cái trùng genre cũ, có cái phải phát minh mới vì cộng đồng nghe đó chưa từng được ngành gọi tên. Các tính năng kiểu Discover Weekly đứng trên cấu trúc cộng đồng ấy để làm điều mà bảng genre cũ không làm nổi: gợi ý thứ nằm trong thế giới của bạn nhưng bạn chưa gặp, vì "thế giới của bạn" giờ được vẽ bằng hành vi của những người nghe giống đường nghe của bạn, không phải bằng cái kệ mà album được xếp vào.

Kể cho công bằng thì phải kể cả giới hạn. Cấu trúc nghe trôi theo thời gian, cộng đồng của năm nay không phải cộng đồng của năm sau, nên bản đồ phải được dựng lại liên tục, một cách chia là một bức ảnh chụp chứ không phải chân dung vĩnh viễn. Và cụm chỉ phản ánh hành vi của người đang nghe trên nền tảng, không phải sự thật âm nhạc phổ quát nào. Cụm tự nổi luôn là cụm của đúng cái graph được dựng. Case này thắng không phải vì thuật toán tinh xảo hơn nơi khác, mà vì cả vòng nghi ngờ lẫn bước đặt tên được làm nghiêm, ở quy mô công nghiệp.

Những cộng đồng quá gọn

Đổi sang phía bên kia của cùng một kỹ năng. Một đội điều tra chống rửa tiền ở ngân hàng nhìn vào hàng triệu tài khoản, và mỗi tuần họ chỉ đủ sức mở vài trăm hồ sơ. Kẻ gian thì đã học xong bài học của thế hệ rule trước: giữ từng giao dịch trông sạch, từng tài khoản trông bình thường, không con số đơn lẻ nào vượt ngưỡng nào. Câu chuyện này, nếu bạn theo từ đầu sách, đang leo thang: từ chỗ lần theo mạng lưới quanh một tài khoản đã biết là xấu, đến chỗ chấm điểm rủi ro từng tài khoản theo vị trí của nó, và bây giờ là một câu hỏi mới hẳn, có những nhóm tài khoản nào đang cư xử như một cơ thể?

Trực giác trung tâm của bài toán này đáng được phát biểu cẩn thận. Cộng đồng người thật thì nhếch nhác. Quan hệ của một người thật toả ra mọi hướng, bạn của bạn không quen nhau hết, tiền và liên hệ rò rỉ ra ngoài nhóm liên tục, người ta mua hàng, trả hoá đơn, chuyển tiền cho những người chẳng liên quan gì đến nhau. Còn một cụm tài khoản gần như chỉ giao dịch với nhau, kín, gọn, tuổi tài khoản sàn sàn nhau, ít dây mơ rễ má ra thế giới bên ngoài, là một hình thái mà đời sống thật hiếm khi tự sinh ra. Trên bản đồ cộng đồng của toàn bộ mạng lưới, sự quá gọn ấy nổi lên như một vùng mật độ bất thường so với nền. Điều đáng ngờ không phải là cụm tồn tại, mọi mạng người đều đầy cụm, mà là cụm gọn gàng hơn mức con người sống.

Trực giác này tổng quát hơn một domain. Trong bảo hiểm, có những cụm hồ sơ claim chia nhau cùng vài bác sĩ, vài gara, vài văn phòng luật sư, không hồ sơ nào sai một mình, từng hồ sơ đọc lên đều hợp lệ, nhưng việc cả trăm hồ sơ quấn quanh đúng từng ấy thực thể tạo thành một cộng đồng dày bất thường mà xác suất tự nhiên khó giải thích. Cấu trúc chung của cả cụm mới là điều bất thường, không phải bất kỳ thành viên nào của nó.

Và đây là chỗ kỷ luật vận hành trở thành phần nặng nhất của case. Trong các hệ thống loại này, những nền tảng graph analytics mà các ngân hàng lớn triển khai công khai, community detection là bộ lọc tạo candidate. Đầu ra của nó là một danh sách các cụm đáng nhìn, kèm lý do bằng tiếng người, mật độ nội bộ, độ kín so với nền, các thực thể được chia chung. Danh sách đó là đầu vào của một điều tra viên, không phải đầu vào của một cái nút đóng tài khoản. Lý do nằm ở giá của cái sai. Một cụm tự nổi hoàn toàn có thể là một gia đình ba thế hệ chung địa chỉ, một hội đồng hương chuyển tiền qua lại, một ký túc xá chung đường wifi. Guilt-by-association vốn đã là rủi ro phải quản lý khi chấm điểm từng tài khoản, với cả một nhóm nó còn nặng hơn, vì một cụm bị đóng oan là hàng chục con người mất quyền truy cập tài chính cùng một lúc. Bước đặt tên của vòng nghi ngờ, ở domain này, mang nghĩa pháp lý: cái tên cuối cùng của cụm là kết luận điều tra, và chỉ con người được viết nó.

Các nền tảng như Quantexa và Linkurious công bố case study với những ngân hàng lớn, Quantexa với Danske Bank là một ví dụ, về việc dùng entity resolution° và phân tích mạng lưới trong điều tra AML. Các nguồn công khai mô tả quy trình và vai trò của điều tra viên; con số tỷ lệ phát hiện không được công bố, nên phần kể ở đây giữ ở mức định tính.

Các hệ thống trưởng thành trong vùng này đo thành công bằng chất lượng candidate, bao nhiêu phần trăm hồ sơ máy đề xuất dẫn đến một cuộc điều tra đáng giá, chứ không bằng số cụm tìm thấy. Vì thuật toán thì luôn tìm thấy cụm. Thứ quý là quy trình biến một cách chia thành một hồ sơ đáng mở. Và những điều tra viên trong câu chuyện này biết rõ một điều mà chương này chưa chạm tới: bên cạnh những cụm bất thường tự nổi lên, còn có những vụ mà họ biết trước hình dạng cụ thể của nó, biết rõ đến mức tả được bằng lời. Đó là một loại bài toán khác.

❦

Ba cách để tin nhầm một cụm

Mọi failure mode của chương này đều là một bước của vòng nghi ngờ bị bỏ qua, và vì vòng có ba bước nên có ba cách quen thuộc để ngã.

Cách thứ nhất, tin một lần chạy. Nó trông thế này: dashboard của công ty ghi rằng khách hàng thuộc 14 phân khúc hành vi, con số 14 sống trong slide, đi vào OKR, được nhắc trong báo cáo quý, và không ai biết rằng lần chạy tuần sau ra 11, lần sau nữa ra 16, vài nghìn khách hàng lặng lẽ đổi nhà mỗi khi seed đổi. Lý do nó xảy ra nằm trong bản chất của thuật toán: thứ tự duyệt node có yếu tố ngẫu nhiên, và mặt phẳng tối ưu có nhiều đỉnh cao gần bằng nhau, nhiều cách chia điểm xấp xỉ nhau cùng hợp lệ, nên một lần chạy là một mẫu rút ra từ một phân phối các cách chia chứ không phải sự thật duy nhất. Cái làm lỗi này nguy hiểm hơn lỗi tương tự ở chương trước là cụm có ranh giới, và ranh giới vẽ ra thì trông như biên giới quốc gia, vững chãi hơn nhiều so với bản chất của nó. Cách bắt: một quy ước báo cáo, không cách chia nào rời khỏi đội mà thiếu chỉ số ổn định đi kèm, chạy n lần, tỷ lệ cặp node giữ chung nhà là bao nhiêu, vùng biên nằm ở đâu. Phần lõi ổn định được phép lên dashboard. Phần mờ phải mang nhãn mờ.

Cách thứ hai, vặn nhầm núm resolution, hoặc tệ hơn, không biết núm tồn tại. Nó trông thế này: hoặc cách chia trả về ba cụm khổng lồ, khách miền Bắc, khách miền Nam, khách còn lại, đúng một cách hoàn toàn vô dụng, hoặc trả về năm nghìn cụm vụn mà cụm lớn nhất có bốn mươi thành viên, và đội marketing không thể nào may đo năm nghìn thông điệp. Cả hai đầu đều được trình bày như "kết quả thuật toán", trong khi chúng là một nấc của một núm vặn mà default của thư viện đã chọn hộ bạn. Lý do nằm ở resolution limit của section ba, không phải chú thích lý thuyết mà là hành vi thật: số cụm là hàm của tham số, không phải hằng số của dữ liệu, chỉ là dòng đó không được in ra cùng output. Cách bắt có hai vế. Vế kỹ thuật: không bao giờ chạy một mức, quét resolution và tìm vùng cấu trúc đứng yên. Vế business, dễ quên hơn: cỡ cụm phải khớp cỡ hành động, nếu đội chỉ may đo nổi cho mười lăm phân khúc thì cách chia ra ba hay ra năm nghìn đều sai cho câu hỏi này, bất kể điểm modularity đẹp đến đâu.

Cách thứ ba, bỏ bước đặt tên. Nó trông thế này: notebook đẹp, các cụm tách rõ, điểm số cao, hình vẽ lung linh được khen trong buổi demo, và sáu tháng sau không một quyết định nào trong công ty dùng đến cách chia đó, vì "cluster 7" không nói cho ai biết phải làm gì với cluster 7. Lý do: cụm là giả thuyết, tên là kết luận, bỏ bước đặt tên là dừng phân tích ở giữa chừng nhưng trông như đã xong vì có hình vẽ làm bằng chứng. Còn một tầng sâu hơn, một cụm không đặt tên nổi thường là triệu chứng của edge chọn sai, cấu trúc tự nổi từ một quan hệ không mang nghĩa thì chính nó cũng không mang nghĩa, lỗi nằm ở quyết định mô hình từ trước khi thuật toán chạy. Cách bắt: đưa buổi đặt tên vào định nghĩa của xong việc, mỗi cụm lõi phải nhận được một cái tên tiếng người và một câu trả lời cho câu hỏi nhóm này thì mình làm gì khác đi. Cụm nào sau nỗ lực tử tế vẫn vô danh thì ghi nhận là vô danh và loại khỏi mọi quyết định. Vô danh cũng là một kết quả, miễn là nó được khai báo.

Công cụ thám hiểm, không phải công cụ xác nhận

Còn một câu hỏi mà mọi chương của phần này đều phải trả lời: khi nào thì đừng dùng. Với community detection, câu trả lời có vị sắc riêng, vì lời khuyên là đừng dùng chính kỹ thuật của chương này khi business đã có định nghĩa nhóm rõ ràng và định nghĩa đó phục vụ đúng câu hỏi. Khách VIP theo doanh thu, tài khoản doanh nghiệp theo loại hợp đồng, người dùng trả phí theo gói, những cách chia này tồn tại vì những lý do vận hành tốt. Để thuật toán phát minh lại chúng, thường là tệ hơn, một cách chia tự nổi mô phỏng lại tám phần cách chia có sẵn cộng hai phần nhiễu, là một bước lùi mặc đồng phục khoa học dữ liệu.

Community detection sinh ra cho đúng một tình huống: bạn nghi có cấu trúc mà chưa biết nó là gì. Nó là công cụ thám hiểm, không phải công cụ xác nhận. Dùng nó để kiểm chứng một cách chia mình đã tin sẵn là dùng sai cả hai chiều cùng lúc, vì thuật toán sẽ luôn tìm ra một thứ gì đó, và người tin sẵn sẽ luôn đọc ra điều mình tin. Cách dùng trưởng thành mà mình hay gặp là lai: cách chia business làm khung hành động hằng ngày, còn cách chia tự nổi chạy định kỳ như một máy phát hiện sự lệch, khi các cụm hành vi bắt đầu vắt ngang những phân khúc chính thức, đó là tín hiệu bản đồ chính thức đang cũ đi, mỗi bên làm đúng việc của nó.

Quay lại phòng marketing của đầu chương một lần. Bảng phân khúc mới đã chạy, các cụm có tên, chiến dịch quý này may đo theo những thế giới hành vi thay vì theo tờ khai, và cụm câu cá cắm trại nhận được thông điệp đầu tiên trong đời nó. Suốt chương này, cấu trúc là thứ được chờ cho tự nổi lên. Chúng ta không biết trước mình tìm gì, và toàn bộ phương pháp, từ phép so với ngẫu nhiên đến vòng nghi ngờ ba bước, được xây quanh điều kiện đó. Nhưng có những người không cần chờ. Điều tra viên của section trước biết chính xác mình tìm gì, họ đã thấy nó hàng trăm lần, tả được nó bằng lời, vẽ được nó ra giấy, một hình thù cụ thể, biết trước, chỉ chưa biết nó đang nằm ở đâu trong nửa tỷ giao dịch. Câu hỏi có cấu trúc nào ở đây không, và câu hỏi hình thù này nằm ở đâu, là hai loại câu hỏi khác nhau. Loại thứ hai, chưa công cụ nào trong chương này chạm tới được.

✱ hết bản in thử