Tối ưu hóa kết quả của bạn và thúc đẩy nhiều tác động hơn với AI có thể hành động

Khám phá hàng chục video, ví dụ và bài viết để giúp bạn tìm hiểu AI có thể hành động, Khoa học dữ liệu, AI và hơn thế nữa.
Dự đoán tỷ lệ người chơi Churn

Học máy đã trở thành một phần không thể thiếu trong bối cảnh công nghệ, cho phép các doanh nghiệp trích xuất những hiểu biết có giá trị từ dữ liệu của họ. Bây giờ nó đã trở nên phổ biến và tạo thành nền tảng của Trí tuệ nhân tạo (AI). 

Ví dụ: bạn có thể đã nghe nói về một thứ gọi là ChatGPT, gần đây đã thực hiện một số vòng trên Internet và vừa được ca ngợi vì khả năng kỳ lạ (đôi khi) của nó, vừa bị nguyền rủa vì nó gây đau đầu cho bất cứ điều gì từ trường học và Đại học đến nghiên cứu các ấn phẩm giấy đến các trang web Hỏi & Đáp như StackOverflow

Tuy nhiên, việc xây dựng các mô hình học máy có khả năng dự đoán kết quả dựa trên một số thông tin hiện có (ví dụ: dự đoán liệu khối u là lành tính hay ác tính) theo truyền thống đòi hỏi chuyên môn đáng kể về mã hóa và khoa học dữ liệu, khiến nhiều tổ chức không thể tiếp cận được. Điều này đặc biệt đúng đối với các công ty nhỏ hơn, có thể không thể thuê các nhà khoa học dữ liệu hoặc không thể mua phần cứng đủ mạnh để chạy một số thuật toán phức tạp hơn. 

Học máy low-code đang nổi lên như một cách để chống lại những vấn đề này. Với sự trợ giúp của các nền tảng low-code, doanh nghiệp có thể xây dựng và triển khai các ứng dụng machine learning mà không cần đội ngũ chuyên gia. Ngay cả các công ty lớn hơn cũng có thể hưởng lợi từ các nền tảng như vậy, vì một số tác vụ có thể được giảm tải cho nền tảng để giải phóng thời gian cho các nhiệm vụ phức tạp hơn được thực hiện bởi các nhà khoa học dữ liệu và chuyên gia học máy.

Trong bài viết này, một nền tảng học máy mã thấp sẽ được điều tra để xem loại công cụ nào có sẵn, dễ sử dụng như thế nào, loại kết quả nào có thể đạt được và liệu nó có thể thay đổi cách các doanh nghiệp tiếp cận việc ra quyết định dựa trên dữ liệu hay không.

Vấn đề

Có rất nhiều công ty trò chơi, với mục đích không chỉ là khiến mọi người chơi trò chơi của họ mà còn giữ họ chơi trò chơi càng lâu càng tốt. Điều này đặc biệt quan trọng đối với các trò chơi miễn phí, thường bao gồm một số hình thức giao dịch vi mô. 

Có lẽ một trong những hình thức giao dịch vi mô phổ biến nhất là mua tiền tệ trong trò chơi, sau đó cho phép người chơi mua các vật phẩm có thể tạo điều kiện thuận lợi cho tiến trình cấp độ hoặc cho phép tùy chỉnh. Chính những giao dịch mua trong trò chơi này đã tài trợ cho sự phát triển của trò chơi. 

Do đó, điều quan trọng là phải theo dõi số lượng người chơi ngừng chơi trò chơi, còn được gọi là tỷ lệ rời bỏ. Tỷ lệ rời bỏ càng cao, số lượng người chơi rời khỏi trò chơi càng cao và thu nhập được tạo ra càng ít.

Trong bài viết này, chúng tôi sẽ sử dụng một tập dữ liệu trong thế giới thực, chứa thông tin về từng cấp độ mà một người đã chơi. Ví dụ: có thông tin về lượng thời gian chơi, người chơi thắng hay thua cấp độ, số cấp độ, v.v. Tính năng mục tiêu cần được dự đoán trong tập dữ liệu của chúng tôi là 'Churn', có giá trị là 1 nếu người chơi không chơi trò chơi trong hơn 2 tuần sau khi hoàn thành cấp độ và 0 nếu không.

ID người dùng cũng đã được đưa vào, nhưng chúng đã được ẩn danh để không tiết lộ danh tính của người chơi ban đầu. Một số trường cũng đã bị xóa. Tuy nhiên, nó sẽ cung cấp một cơ sở vững chắc để xem liệu các công cụ của Actable AI có thể hữu ích trong việc cố gắng dự đoán liệu người chơi có rời bỏ hay không. Ứng dụng web, thay vì tiện ích bổ sung Google Trang tính, sẽ được sử dụng trong bài viết này.

Bộ dữ liệu có tổng cộng 789.879 hàng (mẫu), khá đáng kể và sẽ giúp giảm các hiệu ứng như mô hình quá phù hợp.

Ý nghĩa của từng tính năng như sau:

  • 'ServerTime': dấu thời gian của máy chủ khi cấp độ được chơi
  • 'EndType': lý do tại sao cấp độ kết thúc (chủ yếu là 'Thắng' nếu người chơi thắng trò chơi và 'Thua' nếu người chơi thua trò chơi)
  • 'LevelType': loại cấp độ
  • 'Cấp độ': số cấp độ
  • 'SubLevel': số cấp phụ
  • 'Biến thể': biến thể cấp độ
  • 'LevelVersion': phiên bản cấp độ
  • 'NextCar': chưa sử dụng (bao gồm để xem cách nền tảng xử lý các tính năng chỉ có 1 nhãn, như sẽ thảo luận sau)
  • 'AddMoves': di chuyển bổ sung có sẵn
  • 'DoubleMana': chưa sử dụng (bao gồm để xem cách nền tảng xử lý các tính năng chỉ có 1 nhãn, như sẽ thảo luận sau)
  • 'StartMoves': số lần di chuyển có sẵn ở đầu cấp độ
  • 'ExtraMoves': đã mua thêm các chiêu thức
  • 'UsedMoves': các bước di chuyển được người chơi sử dụng
  • 'UsedChangedCar': chưa sử dụng (bao gồm để xem cách nền tảng xử lý các tính năng chỉ có 1 nhãn, như sẽ thảo luận sau)
  • "Video đã xem": video đã được xem hay chưa, cung cấp thêm các bước di chuyển
  • 'BuyMoreMoves': Số lần người chơi mua nhiều nước đi hơn
  • 'PlayTime': thời gian chơi cấp độ
  • 'Điểm số': điểm số mà người chơi đạt được
  • 'UsedCoins': tổng số tiền được sử dụng trong cấp độ
  • 'MaxLevel': cấp độ tối đa mà người chơi đạt được
  • 'Nền tảng': loại thiết bị
  • 'UserID': ID của người chơi
  • 'RollingLosses': số trận thua liên tiếp của người chơi
  • 'Churn': 1 nếu người chơi không chơi trò chơi trong hơn 2 tuần, 0 nếu không
Phân tích dữ liệu thăm dò

Một trong những nhiệm vụ đầu tiên cần được thực hiện bởi các nhà khoa học dữ liệu - và có lẽ là một trong những nhiệm vụ tẻ nhạt hơn - liên quan đến phân tích dữ liệu thăm dò (EDA). 

EDA là một phương pháp phân tích dữ liệu liên quan đến việc tóm tắt, trực quan hóa và hiểu các đặc điểm chính của tập dữ liệu. Mục tiêu của EDA là hiểu rõ hơn về dữ liệu và xác định bất kỳ mẫu, xu hướng hoặc bất thường nào có thể có mặt.

Khi thực hiện EDA, các nhà phân tích thường sử dụng các phương pháp thống kê để tính toán số liệu thống kê tóm tắt như giá trị trung bình, trung vị và độ lệch chuẩn. Họ cũng tạo ra các hình ảnh trực quan như biểu đồ, biểu đồ phân tán và biểu đồ hộp để hiểu rõ hơn về phân phối và mối quan hệ giữa các biến. 

Rõ ràng, EDA là một bước quan trọng trong quá trình phân tích dữ liệu vì nó có thể giúp các nhà phân tích phát hiện ra các vấn đề tiềm ẩn với dữ liệu, chẳng hạn như các giá trị bị thiếu hoặc ngoại lệ và thông báo cho việc lựa chọn các mô hình thống kê thích hợp cho các phân tích tiếp theo. Nó cũng có thể giúp hiểu mối quan hệ giữa các tính năng và cách kết hợp các tính năng hiện có để tạo ra các tính năng mới mang tính mô tả nhiều hơn và có khả năng cải thiện hiệu suất mô hình.

Như đã đề cập, Actable AI cung cấp một bộ công cụ cho phép trực quan hóa và tính toán số liệu thống kê. Tuy nhiên, trước khi sử dụng bất kỳ công cụ nào trong số này, dữ liệu phải được cung cấp cho nền tảng. Có ba cách để thực hiện việc này, cụ thể là tải lên tệp CSV, bằng cách tải lên tệp Excel hoặc bằng cách kết nối trực tiếp với cơ sở dữ liệu: 

Các tùy chọn khác nhau để sử dụng dữ liệu trong Actable AI.

Vì dữ liệu của tôi được lưu trữ trong một tệp .csv, tôi đã chọn tùy chọn 'tải lên CSV' sau đó tôi có thể xem dữ liệu trên nền tảng:

Xem tệp CSV đã tải lên trong Actable AI. Ảnh của tác giả.

Các hàng cũng có thể được lọc nhanh để tập trung vào các giá trị cụ thể bằng cách nhập giá trị mong muốn vào hàng trên cùng cho cột mong muốn. Tab 'thống kê' cung cấp một số thống kê cho từng cột trong tập dữ liệu, trong đó giá trị trung bình và độ lệch chuẩn của các giá trị số được tính toán và số lượng (và tỷ lệ phần trăm) mẫu cho mỗi nhãn trong một lớp được đưa ra:

Thống kê một số cột trong tập dữ liệu. Ảnh của tác giả.

Trong hình trên, chúng ta có thể thấy rằng nguyên nhân chính của kết thúc cấp độ (đại diện bởi 'EndType') là do người chơi thua trò chơi (63.6%) so với 35.2% người chơi thắng trò chơi. 

Chúng ta cũng có thể thấy rằng mỗi cấp độ được chơi trung bình 126.6 giây +/- 133.2 giây và cột 'UsedChangeCar' dường như vô dụng vì nó chứa cùng một giá trị cho tất cả các hàng. 

Hơn nữa, giá trị mục tiêu của chúng tôi rất mất cân bằng, chỉ có 63 mẫu trong số 10.000 hàng đầu tiên (tức là 0,6% dữ liệu) có giá trị rời bỏ là 1 (tức là người chơi đã khuấy động). 

Một loại phân tích hữu ích là mối tương quan giữa các tính năng, đặc biệt là các tính năng của các tính năng dự đoán với tính năng đích. Điều này có thể được thực hiện bằng cách sử dụng công cụ 'Phân tích tương quan', nơi có thể thu được một số thông tin chi tiết hữu ích (có thể được xem trực tiếp trên nền tảng AI có thể hành động tại đây):

Tương quan tích cực và tiêu cực. Ảnh của tác giả.

Trong biểu đồ trên, các thanh màu xanh lam cho biết mối tương quan của một đối tượng địa lý với Churn khi giá trị bằng 1, trong khi các thanh màu cam biểu thị mối tương quan tính năng khi Churn bằng 0. Có một số điều rút ra, chẳng hạn như những người chơi mất cấp độ dễ bị khuấy động hơn, và ngược lại những người chơi giành được một cấp độ có xu hướng tiếp tục chơi. Điều này cũng được thể hiện bằng cách sử dụng bản đồ nhiệt:

Bản đồ nhiệt của loại kết thúc cấp độ đối với Churn. Ảnh của tác giả.

Rõ ràng là phần lớn các mẫu mà người chơi đã thua trò chơi tương ứng với trường hợp khi Churn bằng 1. Điều đó nói rằng, cũng cần lưu ý rằng mối tương quan Spearman khá thấp, cho thấy các tính năng riêng lẻ này tương quan khá yếu với mục tiêu của chúng tôi. Điều này có nghĩa là có thể sẽ cần phải thực hiện kỹ thuật tính năng, theo đó các tính năng hiện có được sử dụng để tạo ra các tính năng mới nắm bắt thông tin nổi bật hơn cho phép mô hình thực hiện các dự đoán chính xác hơn.

Đào tạo mô hình phân loại

Trong thế giới thực, chúng ta thường phải tạo ra các tính năng mới tương quan hơn với tính năng mục tiêu, từ đó cho phép dự đoán đáng tin cậy hơn. Tuy nhiên, trước khi tạo các tính năng mới, cần xem loại hiệu suất nào chúng ta có thể đạt được chỉ bằng cách sử dụng các tính năng gốc trong tập dữ liệu của mình. Để làm như vậy, chúng ta cần sử dụng phân tích phân loại, vì chúng ta muốn dự đoán liệu một người chơi có khuấy động hay không. Nói cách khác, chúng tôi muốn gán một trong hai nhãn cho mỗi hàng, dựa trên một tập hợp các tính năng. 

Điều này có nghĩa là chúng ta có thể dự đoán liệu người chơi sẽ khuấy động (ngừng chơi) dựa trên dữ liệu như thời gian chơi, loại kết thúc, số lần di chuyển đã được sử dụng để hoàn thành cấp độ, v.v. Do đó, nó sẽ cho phép nhà phát triển trò chơi phản hồi nhanh chóng nếu dự đoán rằng nhiều người sẽ ngừng chơi trò chơi. Nó cũng có thể giúp xác định xem có cấp độ nào đặc biệt rắc rối hay không, để có thể thiết kế các cấp độ hấp dẫn hơn.

Khởi chạy phân tích phân loại trong Actable AI cung cấp cho chúng ta một số tùy chọn, trong đó chủ yếu nhất như sau:

  • Cột thời gian: cột trong bảng của chúng tôi tương ứng với dấu ngày / thời gian. Trong trường hợp này, nó được gọi là 'SereverTime'.
  • Phạm vi thời gian: các mẫu (hàng) trong tập dữ liệu của chúng tôi có thể được lọc để chỉ bao gồm những mẫu trong một phạm vi thời gian nhất định. Dữ liệu của chúng tôi kéo dài 4 tháng, từ tháng Giêng năm 2019 đến tháng Tư năm 2019. Tuy nhiên, có thể là một ý tưởng tốt để loại trừ vài tuần đầu tiên - giả sử tháng đầu tiên - để chúng tôi có thể dự trữ một số dữ liệu lịch sử mà chúng tôi có thể sử dụng để tính toán các tính năng dựa trên thời gian mới. Thêm về điều đó trong bài viết tiếp theo.
  • Mục tiêu dự đoán: cột được dự đoán, đó là 'Churn' trong trường hợp của chúng tôi.
  • Dự đoán: các cột được sử dụng để dự đoán mục tiêu. Hầu hết các cột có thể được sử dụng ở đây, mặc dù chúng tôi có thể loại trừ bất kỳ tính năng nào dư thừa, chẳng hạn như 'UsedChangeCar' mà chúng tôi đã xem xét trong bài viết trước
  • Nhóm nhạy cảm: Tài liệu nêu rõ rằng điều này đề cập đến "Các nhóm chứa thông tin nhạy cảm và cần được bảo vệ khỏi sự thiên vị". Chúng tôi sẽ giữ cho nó đơn giản và bỏ qua trường trong bài viết này.
  • Cột phụ: bất kỳ cột nào cần được bao gồm trong kết quả được hiển thị, chưa được chọn làm một phần của mục tiêu hoặc dự đoán dự đoán. Chúng tôi có thể chọn 'ServerTime' để chúng tôi có thể xem ngày-giờ của từng mẫu.
  • Bộ lọc: lọc các mẫu trong tập dữ liệu của chúng tôi. Ví dụ: chúng tôi có thể quan tâm hơn đến việc tập trung vào những người chơi đã vượt quá cấp độ 100 của trò chơi, vì vậy chúng tôi có thể chỉ định điều đó ở đây
  • Giới hạn thời gian đào tạo: các mô hình nên được đào tạo trong bao lâu. Tôi đã đặt điều này thành 1 giờ chỉ để xem loại hiệu suất nào có thể đạt được trong một khoảng thời gian tương đối hạn chế. 
  • Giải thích các dự đoán: có nên tính toán các giá trị Shapley giải thích sự đóng góp của mỗi cột của mẫu trên kết quả dự đoán hay không. Thông tin thêm về điều này trong thời gian ngắn. Sẽ rất thú vị khi thấy điều này, vì vậy chúng tôi có thể bật tùy chọn này.
  • Tối ưu hóa chất lượng: có nên điều chỉnh mô hình để cải thiện hiệu suất hay không. Nó không tương thích với tùy chọn 'giải thích dự đoán', nhưng có thể đáng để đào tạo một mô hình khác với tùy chọn này được chọn để thử và tối đa hóa hiệu suất.
  • Xác thực chéo: có nên chia dữ liệu thành nhiều lần để thực hiện đánh giá mạnh mẽ hơn hay không. Chúng ta có thể giữ cho nó đơn giản và bỏ qua điều này.

Các tùy chọn được chọn trong ứng dụng web Actable AI. Hình ảnh do tác giả cung cấp.

Ngoài ra còn có một số tùy chọn nâng cao hơn (nằm trong tab 'Nâng cao') như sau:

  • Tối ưu hóa cho: số liệu được sử dụng để tối ưu hóa mô hình. Một số tùy chọn có sẵn, chẳng hạn như độ chính xác truyền thống, độ chính xác vi mô / vĩ mô / trọng số / thu hồi / F1, v.v. Giải thích chi tiết về các số liệu này nằm ngoài phạm vi của bài viết này, nhưng bạn có thể tìm thêm thông tin trong bảng thuật ngữ của Actable AI. Trong trường hợp này, chúng ta có thể sử dụng ROC AUC, phù hợp hơn hầu hết các số liệu khác do phân phối mục tiêu mất cân bằng như đã quan sát trong bài viết trước.
  • Cắt tỉa tính năng: có cho phép sử dụng ít tính năng hơn khi đào tạo mô hình hay không, để bất kỳ tính năng nào có thể làm giảm hiệu suất hoặc không hữu ích đều có thể được bỏ qua. Điều này có thể làm cho các mô hình đơn giản hơn và có thể cải thiện hiệu suất, vì vậy đây là một tùy chọn hữu ích để kích hoạt.

Sau khi hoàn tất, chúng ta có thể tiếp tục và đào tạo các mô hình bằng cách nhấp vào nút 'chạy'. 

Sau vài phút, kết quả được tạo và hiển thị, cũng có thể được xem tại đây. Một số số liệu khác nhau được tính toán, đây không chỉ là thực hành tốt mà còn khá cần thiết nếu chúng ta thực sự muốn hiểu mô hình của mình, vì mỗi số liệu tập trung vào các khía cạnh nhất định của hiệu suất của mô hình. Chỉ số đầu tiên được hiển thị là chỉ số tối ưu hóa, với giá trị là 0,675. 

Số liệu đánh giá. Ảnh của tác giả.

Điều này không tuyệt vời, nhưng hãy nhớ lại rằng chúng tôi đã không tối ưu hóa mô hình cho chất lượng. Hơn nữa, trong EDA của chúng tôi, chúng tôi nhận thấy rằng các tính năng tương quan khá yếu với mục tiêu, vì vậy không có gì ngạc nhiên khi hiệu suất có lẽ không đột phá. 

Kết quả này cũng nhấn mạnh tầm quan trọng của việc hiểu kết quả; Chúng tôi thường sẽ rất hài lòng với độ chính xác 99,7%. Tuy nhiên, điều này phần lớn là do tính chất mất cân bằng của tập dữ liệu, vì vậy ngay cả một bộ phân loại giả chỉ đơn giản là chọn lớp phổ biến nhất cũng có thể đạt được điểm cao. Một bài viết tuyệt vời về điều này có thể được xem ở đây.

ROC và các đường cong thu hồi chính xác cũng được hiển thị, một lần nữa cho thấy hiệu suất hơi kém: 

Đường cong ROC. Ảnh của tác giả.

Đường cong thu hồi chính xác. Ảnh của tác giả.

Những đường cong này cũng hữu ích để xác định ngưỡng nào chúng ta có thể sử dụng trong ứng dụng cuối cùng của mình. Ví dụ: nếu mong muốn giảm thiểu số lượng dương tính giả, thì chúng ta có thể chọn ngưỡng mà mô hình đạt được độ chính xác cao hơn và kiểm tra việc thu hồi tương ứng sẽ như thế nào.

Một ma trận nhầm lẫn cũng được hiển thị, so sánh các nhãn dự đoán với các nhãn thực tế. Tuy nhiên, điều này giả định ngưỡng xác suất là 0,5, điều này không đặc biệt hữu ích trong trường hợp của chúng tôi vì chúng tôi có thể muốn sử dụng các ngưỡng khác nhau như đã thảo luận ở trên:

Ma trận nhầm lẫn, sử dụng ngưỡng xác suất là 0,5. Ảnh của tác giả.

Tiếp theo, chúng ta có thể thấy bảng tầm quan trọng của tính năng, đây có lẽ là một trong những tính năng thú vị hơn trong ứng dụng Actable AI. Điều này là do, như tên cho thấy, nó thể hiện tầm quan trọng của từng tính năng đối với mô hình tốt nhất thu được. Giá trị P cũng được hiển thị để xác định độ tin cậy của kết quả:

Bảng tầm quan trọng của tính năng. Ảnh của tác giả.

Có lẽ không có gì đáng ngạc nhiên, tính năng quan trọng nhất là 'EndType' (hiển thị nguyên nhân khiến cấp độ kết thúc, chẳng hạn như thắng hoặc thua), tiếp theo là 'MaxLevel' (cấp độ cao nhất do người dùng chơi, với số lượng cao hơn cho thấy người chơi khá tham gia và tích cực trong trò chơi). Mặt khác, 'UsedMoves' (số lần di chuyển được thực hiện bởi người chơi) thực tế là vô dụng và 'StartMoves' (số lần di chuyển có sẵn cho người chơi) thực sự có thể gây hại cho hiệu suất. Điều này cũng có ý nghĩa, vì số lần di chuyển được người chơi sử dụng và có sẵn cho người chơi không có nhiều thông tin; Tuy nhiên, so sánh giữa chúng có thể hữu ích hơn nhiều.

Tiếp theo là một bảng hiển thị xác suất ước tính của mỗi lớp (trong trường hợp này là 1 hoặc 0), được sử dụng để suy ra lớp dự đoán (theo mặc định, lớp có xác suất trên 0,5, tức là xác suất cao nhất, được gán là lớp dự đoán). 

Bảng với các giá trị ban đầu, giá trị Shapley và giá trị dự đoán. Ảnh của tác giả.

Vì tùy chọn 'Giải thích dự đoán' cũng được chọn, các giá trị Shapley cũng được hiển thị. Về cơ bản, các giá trị này cho thấy sự đóng góp của tính năng vào xác suất của lớp dự đoán. Ví dụ: ở hàng đầu tiên, chúng ta có thể thấy rằng giá trị 'RollingLosses' là 36 làm giảm xác suất của lớp dự đoán (0, tức là người đó sẽ tiếp tục chơi trò chơi) cho người chơi đó. 

Ngược lại, điều này có nghĩa là xác suất của lớp khác (1, tức là một người chơi khuấy động) được tăng lên. Điều này có ý nghĩa, bởi vì các giá trị cao hơn của 'RollingLosses' chỉ ra rằng người chơi đã mất nhiều cấp độ và do đó có nhiều khả năng ngừng chơi trò chơi. Mặt khác, các giá trị thấp của 'RollingLoss' thường cải thiện xác suất của lớp âm (tức là người chơi sẽ không ngừng chơi). 

Thông tin nâng cao hơn cũng có thể được xem trong tab 'Bảng xếp hạng', hiển thị chi tiết về tất cả các mô hình được đào tạo, bao gồm loại của chúng (ví dụ: XGBoost, LightGBM, v.v.), điểm số liệu, loại đào tạo, thời gian dự đoán, siêu tham số được sử dụng và các tính năng (cột) được sử dụng. Tất cả các mô hình này được đào tạo tự động mà chúng tôi không cần phải xử lý trực tiếp việc viết mã, bao gồm đặc tả dữ liệu và gói để nhập, xử lý các loại dữ liệu, cài đặt tùy chọn, v.v. 

Thông tin về các mô hình được đào tạo. Ảnh của tác giả.

Sau đó, chúng ta cũng có thể sử dụng mô hình tốt nhất để tạo các dự đoán mới, sử dụng một trong hai phương pháp: chúng ta có thể điền thủ công các giá trị cho mỗi cột và đặt ngưỡng xác suất để xác định lớp nào sẽ chọn hoặc chúng ta cũng có thể sử dụng API được cung cấp để sử dụng mô hình trên tập dữ liệu của riêng mình.

Trang mô hình trực tiếp, nơi các giá trị của mỗi cột có thể được chèn để cung cấp dự đoán bằng cách sử dụng mô hình đã đào tạo. Ảnh của tác giả.

Tại thời điểm này, chúng ta có thể thử cải thiện hiệu suất của mô hình. Có lẽ một trong những cách dễ nhất là chọn tùy chọn 'Tối ưu hóa cho chất lượng' và xem chúng ta có thể đi được bao xa. Tôi đã làm điều đó và nhận được kết quả sau (bạn cũng có thể xem tại đây):

Chỉ số đánh giá khi sử dụng tùy chọn 'Tối ưu hóa cho chất lượng'. Ảnh của tác giả.

Tập trung vào chỉ số ROC AUC mà chúng tôi đã chọn làm chỉ số tối ưu hóa, hiệu suất đã cải thiện từ 0,675 lên 0,709. Đây là một sự gia tăng khá tốt đẹp cho một thay đổi đơn giản như vậy. Nhưng có điều gì khác mà chúng ta có thể làm để cải thiện hiệu suất hơn nữa không? 

Thực sự có một cách để làm điều này, nhưng liên quan đến một số phức tạp bổ sung dưới dạng kỹ thuật tính năng. Điều này liên quan đến việc tạo ra các tính năng mới từ các tính năng hiện có, có thể nắm bắt các mẫu mạnh hơn và có tương quan cao hơn với biến được dự đoán.

Tạo tính năng mới

Thông thường, tại thời điểm này, chúng tôi sẽ cố gắng tạo ra một số tính năng mới có thể hữu ích hơn trong việc dự đoán mục tiêu của chúng tôi. Phải thừa nhận rằng đây là một bước nâng cao được thực hiện bởi các chuyên gia, nhưng nó cho thấy rằng nền tảng AI có thể hành động có thể xử lý cả các trường hợp sử dụng đơn giản và các trường hợp phức tạp hơn. 

Trong trường hợp của chúng tôi, có thể rất hữu ích để tóm tắt các bản ghi theo thời gian. Ví dụ: chúng tôi có thể tạo các cột trong đó mỗi hàng được cập nhật dựa trên lịch sử chơi trong quá khứ của người chơi. Điều này có thể được thực hiện bằng hai phương pháp trong nền tảng Actable AI, đó là (1) cột được tính toán hoặc (2) SQL Lab. 

Hãy bắt đầu với các cột được tính toán. Bạn được trình bày với một giao diện nơi bạn có thể cung cấp tên cho cột mới và biểu thức SQL được sử dụng để tạo cột mới. Các tùy chọn khác cũng được cung cấp, chẳng hạn như đặc tả kiểu dữ liệu của cột.

Các cột được tính toán. Ảnh của tác giả.

SQL Lab, như tên cho thấy, cũng liên quan đến việc viết các biểu thức SQL. Tuy nhiên, bây giờ bạn được cung cấp một bảng điều khiển nơi bạn có thể viết một số truy vấn. Điều này mang lại sự linh hoạt cao hơn khi tạo nhiều cột và khi cần sử dụng các tùy chọn nâng cao hơn, chẳng hạn như cửa sổ bộ lọc. Truy vấn sau đó có thể được chạy, theo đó bảng được tạo có thể được lưu dưới dạng tập dữ liệu mới mà trên đó các công cụ và phân tích mong muốn có thể được áp dụng.

SQL Lab. Hình ảnh của tác giả.

Nếu bạn không quá quen thuộc với SQL, bạn có thể thử sử dụng một cái gì đó như ChatGPT để tạo các truy vấn cho bạn. Trong thử nghiệm hạn chế của tôi, đó là một chút hit-and-miss, vì vậy tôi khuyên bạn nên kiểm tra kết quả theo cách thủ công để xác minh rằng đầu ra mong muốn đang được tính toán chính xác. Rất may, điều này có thể dễ dàng thực hiện bằng cách kiểm tra bảng được hiển thị sau khi truy vấn được chạy trong SQL Lab. Đây là mã SQL tôi đã sử dụng để tạo các cột:

LỰA 

    *,

    SUM ("PlayTime") OVER UserLevelWindow AS "time_spent_on_level",

    (a." Max_Level" - a." Min_Level") LÀ "levels_completed_in_last_7_days",

    COALESCE(CAST("total_wins_in_last_14_days" LÀ SỐ THẬP PHÂN)/NULLIF("total_losses_in_last_14_days", 0), 0,0) LÀ "win_to_lose_ratio_in_last_14_days",

    COALESCE(SUM("UsedCoins") OVER User1DayWindow, 0) AS "UsedCoins_in_last_1_days",

    COALESCE(SUM("UsedCoins") OVER User7DayWindow, 0) LÀ "UsedCoins_in_last_7_days",

    COALESCE(SUM("UsedCoins") OVER User14DayWindow, 0) LÀ "UsedCoins_in_last_14_days",

    COALESCE(SUM("ExtraMoves") OVER User1DayWindow, 0) LÀ "ExtraMoves_in_last_1_days",

    COALESCE(SUM("ExtraMoves") OVER User7DayWindow, 0) LÀ "ExtraMoves_in_last_7_days",

    COALESCE(SUM("ExtraMoves") OVER User14DayWindow, 0) LÀ "ExtraMoves_in_last_14_days",

    AVG("RollingLosses") OVER User7DayWindow AS "RollingLosses_mean_last_7_days",

    AVG ("MaxLevel") OVER PastWindow AS "MaxLevel_mean"

TỪ (

    LỰA

        *,

        MAX ("Cấp độ") OVER User7DayWindow AS "Max_Level",

        MIN ("Level") OVER User7DayWindow AS "Min_Level",

        SUM(CASE WHEN "EndType" = 'Lose' THEN 1 ELSE 0 END) OVER User14DayWindow AS "total_losses_in_last_14_days",

        SUM(CASE WHEN "EndType" = 'Win' THEN 1 ELSE 0 END) OVER User14DayWindow AS "total_wins_in_last_14_days",

        SUM ("PlayTime") OVER User7DayWindow AS "PlayTime_cumul_7_days",

        SUM ("RollingLosses") OVER User7DayWindow AS "RollingLosses_cumul_7_days",

        SUM ("PlayTime") OVER UserPastWindow AS "PlayTime_cumul"

    TỪ "game_data_levels"

    CỬA SỔ

        User7DayWindow AS (

            PHÂN VÙNG THEO "UserID"

            ĐẶT HÀNG THEO "ServerTime"

            PHẠM VI GIỮA KHOẢNG THỜI GIAN "7" NGÀY TRƯỚC VÀ HÀNG HIỆN TẠI

        ),

        User14DayWindow AS (

            PHÂN VÙNG THEO "UserID"

            ĐẶT HÀNG THEO "ServerTime"

            PHẠM VI GIỮA KHOẢNG THỜI GIAN "14" NGÀY TRƯỚC VÀ HÀNG HIỆN TẠI

        ),

        UserPastWindow AS (

        PHÂN VÙNG THEO "UserID"

        ĐẶT HÀNG THEO "ServerTime"

        CÁC HÀNG GIỮA HÀNG TRƯỚC VÀ HÀNG HIỆN TẠI KHÔNG GIỚI HẠN

        )

) NHƯ một

CỬA SỔ

    UserLevelWindow AS (

        PHÂN VÙNG THEO "UserID", "Cấp độ"

        ĐẶT HÀNG THEO "ServerTime"

        CÁC HÀNG GIỮA HÀNG TRƯỚC VÀ HÀNG HIỆN TẠI KHÔNG GIỚI HẠN

    ),

    PastWindow AS (

        ĐẶT HÀNG THEO "ServerTime"

        CÁC HÀNG GIỮA HÀNG TRƯỚC VÀ HÀNG HIỆN TẠI KHÔNG GIỚI HẠN

    ),

    User1DayWindow AS (

        PHÂN VÙNG THEO "UserID" 

        ORDER BY "ServerTime" 

        PHẠM VI GIỮA KHOẢNG THỜI GIAN '1' NGÀY TRƯỚC VÀ HÀNG HIỆN TẠI

    ),

    User7DayWindow AS (

        PHÂN VÙNG THEO "UserID"

        ĐẶT HÀNG THEO "ServerTime"

        PHẠM VI GIỮA KHOẢNG THỜI GIAN "7" NGÀY TRƯỚC VÀ HÀNG HIỆN TẠI

    ),

    User14DayWindow AS (

        PHÂN VÙNG THEO "UserID"

        ĐẶT HÀNG THEO "ServerTime"

        PHẠM VI GIỮA KHOẢNG THỜI GIAN "14" NGÀY TRƯỚC VÀ HÀNG HIỆN TẠI

    )

ĐẶT HÀNG THEO "ServerTime";

Hầu hết các tên tính năng phải tự giải thích; Ví dụ: chúng tôi hiện đang tính toán tổng thời gian mà người dùng đã chơi trò chơi (tức là không chỉ cho phiên hiện tại), số xu được sử dụng trong ngày, tuần và 2 tuần qua, v.v. Tất cả những điều này nhằm cung cấp một số bối cảnh lịch sử về hành trình của người chơi trong trò chơi.

Sau khi hài lòng với các tính năng được tạo, chúng tôi có thể lưu bảng dưới dạng tập dữ liệu mới và chạy một mô hình mới (hy vọng) sẽ đạt được hiệu suất tốt hơn.

Đào tạo một mô hình phân loại mới (hy vọng sẽ được cải thiện)

Đã đến lúc xem các cột mới có hữu ích không. Chúng ta có thể lặp lại các bước tương tự như trước đây, với sự khác biệt duy nhất là bây giờ chúng ta sử dụng tập dữ liệu mới có chứa các tính năng bổ sung. Các cài đặt tương tự được sử dụng để cho phép so sánh công bằng với kết quả ban đầu, với các kết quả sau (cũng có thể được xem tại đây):

Chỉ số đánh giá bằng cách sử dụng các cột mới. Ảnh của tác giả.

Một lần nữa tập trung vào AUC, điều này được cải thiện nhiều so với giá trị ban đầu là 0,675; Nó thậm chí còn tốt hơn mô hình được tối ưu hóa cho chất lượng (0,709). Điều này thể hiện tầm quan trọng của việc hiểu dữ liệu của bạn và tạo ra các tính năng mới có thể cung cấp thông tin phong phú hơn. 

Bây giờ sẽ rất thú vị khi xem tính năng mới nào của chúng tôi thực sự hữu ích nhất; Một lần nữa, chúng ta có thể sử dụng bảng tầm quan trọng của tính năng:

Tính năng bảng tầm quan trọng của mô hình mới. Ảnh của tác giả.

Có vẻ như tổng số trận thua trong 2 tuần qua là khá quan trọng, điều này có ý nghĩa bởi vì người chơi càng thường xuyên thua một trò chơi, họ có nhiều khả năng trở nên thất vọng và ngừng chơi. Mức tối đa trung bình trên tất cả người dùng cũng có vẻ quan trọng, điều này một lần nữa có ý nghĩa vì nó có thể được sử dụng để xác định khoảng cách giữa người chơi với phần lớn người chơi khác (cao hơn nhiều so với mức trung bình cho thấy người chơi đắm chìm trong trò chơi, trong khi các giá trị thấp hơn nhiều so với mức trung bình có thể chỉ ra rằng người chơi vẫn không có động lực tốt). 

Đây chỉ là một vài tính năng đơn giản mà chúng tôi có thể đã tạo. Có những tính năng khác mà chúng tôi có thể tạo, có thể cải thiện hiệu suất hơn nữa. Tôi sẽ để lại điều đó như một bài tập cho người đọc để xem những tính năng khác có thể được tạo ra. 

Đào tạo một mô hình được tối ưu hóa về chất lượng với cùng giới hạn thời gian như trước đây không cải thiện hiệu suất. Tuy nhiên, điều này có lẽ là dễ hiểu vì một số lượng lớn các tính năng đang được sử dụng, do đó có thể dành nhiều thời gian hơn để tối ưu hóa. Như có thể quan sát ở đây, việc tăng giới hạn thời gian lên 6 giờ thực sự cải thiện hiệu suất lên 0.923 (về AUC):

Đánh giá kết quả số liệu khi sử dụng các tính năng mới và tối ưu hóa chất lượng. Ảnh của tác giả.
Kết luận

Tóm lại, chúng tôi đã sử dụng nền tảng Actable AI để tải tập dữ liệu, khám phá các tính năng của nó, tạo các tính năng mới và đào tạo các mô hình phân loại. Tầm quan trọng của tính năng và sự đóng góp của mỗi giá trị tính năng đối với xác suất của lớp dự đoán cũng được tính toán, có thể được nghiên cứu để xác định những hiểu biết hữu ích nào có thể được rút ra để cải thiện hiệu suất mô hình. Chúng cũng có thể được sử dụng để giúp nhà phát triển trò chơi cải thiện thiết kế cấp độ để giữ cho người chơi tham gia nhiều hơn, giảm tỷ lệ rời bỏ và từ đó tăng doanh thu.

Như đã đề cập ở trên, có nhiều hơn nữa có thể được thực hiện. Các mô hình có thể được đào tạo lâu hơn, có thể tạo nhiều tính năng hơn, các bộ lọc và số liệu tối ưu hóa khác nhau có thể được sử dụng và các cách khác để xác định tỷ lệ rời bỏ có thể được xem xét. 

Các công cụ khác cũng có thể được sử dụng, chẳng hạn như phân tích phản thực tế (để xác định ảnh hưởng đến kết quả khi một trong các đầu vào thay đổi), dự báo chuỗi thời gian (để xác định xem có bất kỳ xu hướng theo mùa nào không) và suy luận nhân quả (xem xét các tương tác giữa các tính năng để xác định xem sự thay đổi trong các biến dự đoán có thực sự gây ra thay đổi cho kết quả hay không).

ActableAI
Công ty TNHH Công nghệ Actable AI
Mã số công ty tại Vương quốc Anh: 12669336
Mã số công ty Malta: C99699