Phương pháp đánh giá mô hình phân loại (Classification)

Bigdatauni.com Follow Fanpage Contact

Ở bài viết trước, BigDataUni đã giới thiệu đến các bạn thuật toán đầu tiên của mô hình Classification – mô hình phân loại – là thuật toán K nearest neighbor (KNN) với công thức cơ bản, và ví dụ đơn giản về ứng dụng của KNN trong ngành ngân hàng để hiểu hơn cách vận hành thuật toán. Một trong những bước quan trọng không chỉ riêng đối với KNN, mà còn đối với tất cả các kỹ thuật phân loại khác trong Data mining (hay Machine learning) đó chính là đánh giá độ hiệu quả của mô hình, đánh giá mức độ chính xác của kết quả phân tích có được. Đáng lẽ chúng tôi phải đề cập trước trong bài viết về KNN nhưng vì muốn cung cấp đến các bạn một cách đầy đủ hơn, cụ thể hơn, nên mới tổng hợp và trình bày trong bài viết lần này. Mục đích nữa là trong các bài viết sắp tới về những thuật toán phân loại khác, chúng tôi sẽ không nhắc lại các phương pháp này mà chỉ tập trung vào giải thích thuật toán, và hướng tiếp cận (ứng dụng của mỗi thuật toán).

Để đánh giá một mô hình phân tích, khai phá dữ liệu, thì việc đầu tiên, và thông thường nhất mà các chuyên gia phân tích đều thực hiện, đó chính là chia tập dữ liệu thành các phần phục vụ cho việc huấn luyện mô hình (Training Data) và kiểm chứng mô hình (Testing Data). Xây dựng model thông qua việc lựa chọn thuật toán, xác định các biến dữ liệu, hay điều chỉnh các tham số, v.v sao cho phù hợp sẽ dựa trên dữ liệu training. Sau khi hoàn thành cơ bản mô hình, các chuyên gia tiến hành sử dụng dữ liệu test hay còn gọi “unseen data” để thử nghiệm mô hình bằng cách kết hợp nhiều công thức, chỉ số (metrics) khác nhau để đánh giá mức độ chính xác với input là kết quả (kết quả dự báo, hay phân loại) có được khi chạy mô hình với dữ liệu test.

Như vậy tương tự, một quá trình đánh giá mô hình Classification thường chia làm 2 phần hay hướng tiếp cận: phân chia bộ dữ liệu để huấn luyện và kiểm chứng mô hình; sử dụng các chỉ số để đánh giá độ hiệu quả. Trong bài viết lần này chúng tôi sẽ chỉ giới thiệu cơ bản về các cách thức phân chia bộ dữ liệu và lý thuyết các metrics đánh giá các thuật toán.

Trước khi đi vào những phương pháp đánh giá, chúng ta tham khảo qua một số tiêu chí mô tả độ hiệu quả của mô hình phân loại (theo Data Mining and Knowledge Discovery Handbook )

  • Accuracy: khả năng mô hình phân loại dự báo chính xác, phân loại chính xác, hay xác định đúng class (nhóm, loại) cho dữ liệu cần phân loại.
  • Speed: tốc độ hay khả năng mô hình đưa ra kết quả phân tích nhanh chóng, nó còn liên quan đến chi phí tính toán (computation cost trong lĩnh vực computer science) khi xây dựng, và sử dụng mô hình.
  • Robustness: khả năng của mô hình xử lý nhiễu (noise) hoặc dữ liệu với các giá trị bị thiếu (missing value) và đưa ra dự đoán chính xác.
  • Scalability: phương pháp hay khả năng xây dựng mô hình phân loại hiệu quả trong xử lý, phân tích lượng lớn dữ liệu.
  • Interpretability: liên quan đến khả năng giải thích, mức độ phức tạp của mô hình hay nói cách khác cấu trúc mô hình, phương pháp xây dựng mô hình có dễ hiểu hay không.

Đánh giá mô hình là một phần không thể thiếu trong quá trình phát triển mô hình phân tích, giúp chúng ta tìm ra mô hình tốt nhất, phù hợp nhất với mục tiêu nghiên cứu, và loại dữ liệu. Trong lĩnh vực khoa học dữ liệu, các chuyên gia cho rằng nếu chỉ dùng một tập dữ liệu để tiến hành cùng lúc việc xây dựng và kiểm chứng mô hình là không phù hợp, có thể dẫn đến các vấn đề như mô hình bị “overfitting”, mô hình cố gắng ghi nhớ dữ liệu lúc huấn luyện “memorizing training set”,v.v. Chúng tôi sẽ đề cập các vấn đề này trong những bài viết sắp tới nên các bạn đừng lo lắng vì chúng khó hiểu.

Theo Discovering Knowledge in Data: An Introduction to Data Mining, thì cách thức tiếp cận chủ yếu trong việc xây dựng và đánh giá mô hình khai thác dữ liệu gồm 3 bước chính:

  1. Phân chia tập dữ liệu có sẵn thành tập dữ liệu huấn luyện (training data set) và tập dữ liệu kiểm chứng (testing data set). Sử dụng các phương pháp khác nhau để đánh giá việc phân chia có phù hợp hay không
  2. Xây dựng mô hình khai thác dữ liệu bằng cách sử dụng dữ liệu huấn luyện
  3. Đánh giá mô hình khai thác dữ liệu bằng cách sử dụng dữ liệu kiểm tra

Hai phương pháp phân chia dữ liệu được áp dụng phổ biến bao gồm:

  • Hold out

Phương pháp Hold out là phương pháp phân chia ngẫu nhiên tập dữ liệu thành 2 tập dữ liệu độc lập là tập dữ liệu huấn luyện và tập kiểm định mô hình. Mục đích của phương pháp Hold out là kiểm tra độ hiệu quả của mô hình khi sử dụng nhiều tập dữ liệu khác nhau.

Cụ thể trong phương pháp Hold out chúng ta sẽ có tập dữ liệu

+ Training set: dữ liệu phục vụ xây dựng mô hình, xác định các thuật toán, biến dữ liệu phù hợp.

+ Validation set: là dữ liệu được sử dụng để đánh giá hiệu suất của mô hình được xây dựng trong giai đoạn huấn luyện, hỗ trợ thử nghiệm để tinh chỉnh các tham số mô hình và chọn mô hình hoạt động tốt nhất. Không phải mọi thuật toán phân loại nào cũng cần Validation set, nên phương pháp Hold out thông thường chỉ dừng lại ở 2 tập dữ liệu training và test data mà thôi.

+ Test set (unseen set) là dữ liệu được sử dụng để đánh giá độ hiệu quả của mô hình, mức độ chính xác trong việc phân loại dữ liệu (không chứa nhãn phân loại, tức giá trị của biến mục tiêu phân loại bị che đi)

Thông thường tỷ lệ phân chia cho training data set là 70% và test data set là 30%. Ưu điểm của Hold out là nhanh chóng, đơn giản và linh hoạt. Tuy nhiên, kỹ thuật này thường dẫn đến độ biến thiên cao do sự khác biệt lớn trong 2 tập dữ liệu, dẫn đến sự khác biệt trong việc dự báo, hay phân loại. Do đó việc áp dụng Hold out cần kết hợp các phương pháp để kiểm tra mức độ khác biệt của 2 tập dữ liệu.

  • Cross – validation

Cross – validation là một kỹ thuật phân chia tập dữ liệu ban đầu thành training data được sử dụng để huấn luyện mô hình và một tập dữ liệu độc lập được sử dụng để đánh giá. Phương pháp phổ biến nhất là K – fold, trong đó bộ dữ liệu ban đầu được phân chia thành các tập con có kích thước bằng nhau, được gọi là “fold”. Giá trị k là số tập dữ liệu được phân chia, k = 2 là 2 tập dữ liệu, k = 5 là 5 tập dữ liệu. Phương pháp này được lặp lại nhiều lần cho đến khi chúng ta có k số mô hình khác nhau, sao cho mỗi lần, một trong các tập k được sử dụng làm tập kiểm thử và các tập còn lại khác được ghép lại với nhau để tạo thành tập huấn luyện. Việc ước tính độ chính xác hay lỗi (accuracy hay error) được tính trung bình trên tất cả các thử nghiệm k để đánh giá mức độ hiệu quả của cả mô hình.

Nguồn hình: en.wikipedia.org

Ví dụ khi thực hiện five – fold cross – validation (k = 5), dữ liệu trước tiên được phân thành 5 phần có kích thước bằng nhau (xấp xỉ). Một chuỗi các mô hình được đào tạo. Mô hình đầu tiên được đào tạo sử dụng tập dữ liệu đầu tiên làm tập kiểm tra và các tập còn lại được sử dụng làm tập huấn luyện. Điều này được lặp lại sao cho mỗi tập đều được đưa vào test model 1 lần sau đó ước tính độ chính xác trung bình trên tất cả 5 thử nghiệm để đánh giá độ hiệu quả của cả mô hình.

Có thể thấy, mọi điểm dữ liệu sẽ nằm trong một tập kiểm thử (test set) chính xác một lần và được ở trong tập huấn luyện (training set) k-1 lần nhờ đó làm giảm đáng kể độ lệch chuẩn, cũng như phương sai, phương pháp này được sử dụng nhiều hơn Hold out. Tuy nhiên việc kiểm tra tính tương đồng (khác biệt) giữa các tập dữ liệu sẽ khó khăn hơn.

Ngoài Hold out, và Cross – validation, chúng ta còn phương pháp khác như Leave – one – out Bootstrap, các bạn có thể search và tham khảo thêm. Cả 2 phương pháp khác này cũng dựa trên nguyên tắc training và test data như đề cập ở trên.

Tiếp theo chúng ta cùng đi qua những chỉ số để đo lường mức độ chính xác trong việc dự báo, hay phân loại của model.

  • Confusion matrix

Confusion matrix hay error matrix, hoặc contigency table là một trong những phương pháp đánh giá mô hình phân loại quan trọng và phổ biến nhất, cũng là cơ sở hình thành cho các phương pháp đánh giá khác.

Confusion matrix là một ma trận tổng quát thể hiện kết quả phân loại chính xác và kết quả phân loại sai được tạo ra bởi mô hình phân loại bằng cách so sánh với giá trị thật của biến mục tiên (biến phân loại) của dữ liệu test. Ma trận có NxN với N là tổng số giá trị của biến mục tiêu (số class / nhóm của biến phân loại). Giả sử đơn giản nhất chúng ta thực hiện phân loại dữ liệu theo biến mục tiêu chỉ có 2 giá trị ví dụ Có và Không, 0 và 1, v.v chúng ta sẽ được một Confusion matrix 2×2 như dưới đây.

Bảng dưới đây là Confusion Matrix tổng quát.

Kết hợp một cách tổng quan với các chỉ số, Confusion matrix sẽ được thể hiện đầy đủ như sau:

Như đã nói ở đầu bài viết là các thuật ngữ tiếng Anh có trong những phương pháp đánh giá chúng tôi sẽ không dịch lại nghĩa tiếng Việt mà chỉ cố gắng giải thích cho các bạn hiểu, vì nếu dịch ra sẽ khó nhớ hơn, các bạn sẽ khó hiểu hơn, các bạn có thể tự tra từ điển để hiểu thêm về nghĩa của các từ chưa biết.

Ở bảng đầu tiên 0 sẽ tương ứng với “Negative”, và 1 sẽ tương ứng với “Positive”. Kết quả dự báo là “Predicted category/ class” hay còn gọi là kết quả phân loại; “Actual class/ category” là giá trị thật của dữ liệu.

Nếu kết quả dự báo/ phân loại của mô hình là “Positive” đúng với giá trị thực sự là “Positive”, chúng ta có True Positive (TP).

Nếu kết quả dự báo/ phân loại của mô hình là “Positive” sai với giá trị thực sự là “Negative”, chúng ta có False Positive (FP), được gọi là Type I Error (sai lầm loại 1)

Tương tự như trên chúng ta xét tiếp cho False Negative (FN) được gọi là Type II Error (sai lầm loại II) và True Negative (TN).

Bàn luận một chút về Positive và Negative cho các bạn dễ hiểu. Positive là kết quả tích tực, hay ví dụ là mục tiêu kinh doanh, mục tiêu nghiên cứu mà chuyên gia phân tích, hay các nhà quản lý mong muốn, và Negative là ngược lại.

Nếu ngộ nhận kết quả phân loại theo hướng tích cực, hay xây dựng mô hình hướng đến sao cho đạt được mục tiêu sẽ dẫn đến dự báo “Positive” nhưng đa phần giá trị thực lại là “Negative”. Khá giống với lý thuyết thống kê, phần kiểm định, có nhắc đến sai lầm loại I tức kiểm định dẫn đến bác bỏ giả thuyết khi giả thuyết này lại đúng, và sai lầm loại II tức kiểm định dẫn đến không bác bỏ giả thuyết khi giả thuyết này lại sai. Các bạn có thắc mắc sai lầm loại nào nghiêm trọng hơn? Ví dụ lợi nhuận công ty thực chất “không tăng” nhưng lại cho rằng tăng sẽ nghiêm trọng hơn lợi nhuận công ty thực chất “tăng” mà lại phủ nhận không tăng.

Quay lại với Confusion Matrix, chúng ta có các chỉ số (metrics) với công thức trên bảng 2:

Precision (Positive PredictedValue) là tỷ lệ các trường hợp Positive được phân loại đúng.

Negative Predictive Value là tỷ lệ các trường hợp Negative được phân loại đúng.

Accuracy Rate tỷ lệ model phân loại, dự báo đúng cho tất cả trường hợp Negative và Positive.

Error Rate bằng 1 – Accuracy rate tỷ lệ model phân loại, dự báo sai cho tất cả trường hợp Negative và Positive.

Sensitivity (Recall) là tỷ lệ các trường hợp Positive thực sự (actual) đã được phân loại đúng. Lưu ý tránh nhầm lẫn với Precision. Sensitivity là tỷ lệ mà trong tất cả giá trị mà mô hình phân loại, có bao nhiêu giá trị (positive) thực sự đã được phân loại đúng, còn Precision là tỷ lệ mà trong tất cả giá trị Positive thực sự có bao nhiêu giá trị (positive) đã được phân loại đúng. Precision cung cấp cho chúng ta thông tin là: mô hình đã “bắt” đúng, chính xác bao nhiêu giá trị Positive thực sự, còn Sensitivity cung cấp cho chúng ta thông tin là: mô hình đã “bỏ lỡ” bao nhiêu giá trị Positive thực sự.

Specificity là tỷ lệ các trường hợp Negative thực sự (actual) đã được phân loại đúng. Lưu ý tránh nhầm lẫn với Negative Predictive Value. Specificity là tỷ lệ mà trong tất cả giá trị mà mô hình phân loại, có bao nhiêu giá trị (negative) thực sự đã được phân loại đúng, còn Negative Predictive Value là tỷ lệ mà trong tất cả giá trị Negative thực sự có bao nhiêu giá trị (negative) đã được phân loại đúng.

Chúng ta đã tìm hiểu các chỉ số của Confusion matrix, vậy thì để một mô hình phân loại được đánh giá, điều chỉnh hiệu quả thì trước tiên nó phải tăng tỷ lệ các trường hợp TP, TN và giảm FP, FN, để tăng tỷ lệ Accuracy và giảm tỷ lệ Error. Khi so sánh giữa các model sử dụng nhiều thuật toán khác nhau, và chọn ra thuật toán nào là hiệu quả thì chúng ta ngoài ngoài dựa vào Accuracy, hay Error rate mà còn dựa vào Precision, Recall, Specificity và nhiều chỉ số khác, phương pháp khác mà chúng tôi đề cập ngay sau đây.

Ngoài ra việc chọn lựa xem chỉ số nào là quan trọng hơn ví dụ giữa Sensitivity và Specificity tức là dự báo, phân loại Positive và Negative cái nào cần thiết hơn, thì vấn đề này còn tùy vào loại dữ liệu, mục tiêu nghiên cứu, các khía cạnh khác về kinh tế, xã hội, v.v. Như ở case study ví dụ ứng dụng KNN trong ngân hàng để phân loại các khách hàng có khả năng nợ xấu hay không để tiến hành cấp tín dụng (cho phép mở khoản vay) dựa trên các đặc điểm của họ.

Thuật toán KNN và ví dụ đơn giản trong ngành ngân hàng

Giá trị = 1 của biến mục tiêu nghĩa là có khả năng nợ xấu, và giá trị = 0 là ngược lại. Vậy ngân hàng sẽ quan tâm đến giá trị nào hơn. Tất nhiên là khả năng nợ xấu, vì nếu khách hàng không có khả năng trả nợ thì khi ngân hàng cho vay họ sẽ gặp rủi ro tín dụng cao, còn nếu khách hàng không có khả năng nợ xấu, trường hợp này ngân hàng phải phân tích riêng xem họ có nhu cầu vay hay không, nhưng đây là không phải là mục tiêu chính của mô hình phân loại nợ xấu. Do đó giá trị = 1, nợ xấu, sẽ là Positive, và ngược lại 0 là Negative. Lúc này Sensitivity đóng vai trò quan trọng hơn vì nó xét đến khả năng mô hình phân loại Positive chính xác, hiệu quả hơn.

Do đó nhờ vao đặc tính của Positive, negative thì đối với một mô hình phân loại nhiều lớp (tức nhiều class và nhóm) không chỉ có 2 lớp như “nợ xấu” và “không nợ xấu” giống như ví dụ ở trên. Nếu bài toán phân loại có nhiều nhóm, nhiều lớp thì dựa trên độ quan trọng, kinh nghiệm, hay đơn giản là ngẫu nhiên chúng ta có thể chọn ra 1 lớp làm Positive, các lớp còn lại gộp thành Negative và tiến hành xây dựng Confusion matrix như thông thường và sau đó có thể tính giá trị trung bình của các chỉ số Accuracy, Precision, Recall, F1 score (sẽ nói dưới đây) v.v. Cụ thể như thế nào thì ở các bài viết sắp tới trường hợp sử dụng mô hình phân loại nhiều lớp, hay nhóm chúng tôi sẽ trình bày lại theo ví dụ cụ thể.

  • F1 score (F1 measure)

Chúng ta đã nói đến cách xem xét tầm quan trọng giữa chỉ số Sensitivity và Specificity, vậy còn Recall với Precision thì như thế nào? Câu hỏi này phức tạp hơn vì cả 2 chỉ số đều đánh giá khả năng mô hình phân loại giá trị Positive hiệu quả như thế nào. Vậy nếu chúng ta muốn cải thiện cùng lúc cả 2 chỉ số này hay nói cách khác là sử dụng phương pháp nào đó kết hợp cả 2 chỉ số này để đánh giá hiệu quả của mô hình phân loại thì như thế nào? Chỉ số F1 điều hòa “harmonic” tầm quan trọng của cả Recall và Precision sao cho tương đương nhau. Công thức của chỉ số F1:

Tuy nhiên trong một số trường hợp chuyên gia phân tích thấy rằng tầm quan trọng của 2 chỉ số precision và recall là khác nhau, và họ thấy rằng cần thiết gán thêm trọng số để tính toán sao cho phù hợp thì chỉ số F1 được thay đổi như sau:

F1 – score nằm trong khoảng giá trị từ 0 đến 1, càng lớn thì cho thấy độ hiệu quả của model phân tích càng cao.

  • Gain chart và lift chart

Gain chart và lift chart là 2 phương pháp đánh giá hiệu quả của mô hình phân loại dựa trên việc đánh giá tỷ lệ Response, tức so sánh các kết quả phân loại có được từ có sử dụng hoặc không sử dụng mô hinh. Khác với những phương pháp trên thì Gain chart và lift chart tính toán, định lượng độ hiệu quả theo % của tập dữ liệu tổng thể và có kết hợp đồ thị trực quan.

Mỗi điểm trên lift chart được tính bằng cách lấy (tổng số các đơn vị dữ liệu được phân loại đúng theo Positive hay Negative trên tổng số các đơn vị dữ liệu được phân loại theo Positive hay Negative) chia cho (tổng số các đơn vị dữ liệu thực sự được phân loại là Positive hay Negative trên tổng số đơn vị của tổng thể).

Cụ thể lift = (True Positive / Total Predicted Positive) / (Actually Positive / Grand total), tương tự xét cho Negative. (các bạn xem lại các bảng Confusion matrix ở trên). Ví dụ dưới đây chúng ta xét cho Positive.

Lift chart được vẽ bằng cách: đầu tiên tính toán xác suất mà mỗi đơn vị dữ liệu được phân loại Positive (tùy theo thuật toán mô hình sử dụng), sắp xếp các đơn vị dữ liệu này theo thứ tự giảm dần ứng với giá trị tỷ lệ vừa tính, sau đó tính lift cho từng mẫu (lấy % theo tổng thể, thông thường là 10% cho mỗi mẫu, hay còn gọi là thập phân vị) với cơ sở trong mỗi mẫu này sẽ có True positive, Total Predicted positive, Actually Positve.

Lift chart được xây dựng theo việc tính giá trị tích lũy của lift theo quy mô mẫu dữ liệu tăng dần (với cơ sở là các đơn vị dữ liệu đã được sắp xếp giảm dần trước đó). Do đó chúng ta sẽ có một số đơn vị dữ liệu trong tổng thể được phân loại theo phân lớp ấy, nằm ở phần dữ liệu 10%, 20% , nên khi tiến gần đến 100% thì lift giảm dần đến 1, lúc này model không còn phân loại dữ liệu theo Positive do đã phân loại hết các đơn vị dữ liệu cần phân loại.

So sánh giữa các mô hình phức tạp để tìm xem mô hình nào hiệu quả thì lift chart là một hướng tiếp cận thích hợp với cơ sở là xét cùng tại một vị trí phân vị bất kỳ, đồ thị của model nào có lift cao hơn sẽ hiệu quả hơn.

Gain chart là biểu đồ khác kết hợp với Lift chart để thể hiện rõ hơn độ hiểu quả của mô hình phân loại. Gain chart cung cấp cho chúng ta thông tin là trong % số đơn vị tổng thể, chúng ta có thể đạt % bao nhiêu đơn vị dữ liệu được phân loại chính xác. Dựa trên kết quả tính toán có được ở quá trình thực hiện Lift chart chúng ta sẽ xây dựng được Gain chart tương ứng như dưới đây. Ví dụ trong khoảng 20% số đơn vị tổng thể đúng thì có khoảng 62% số đơn vị được phân loại chính xác. Gain chart có vẻ dễ hiểu hơn so với Lift chart.

Vì bài viết có giới hạn nên chúng tôi không thể diễn giải chi tiết hơn về Gain chart, hay Lift chart, nếu có gì không hiểu, các bạn có thể search các tài liệu khác để tham khảo thêm.

  • ROC và AUC

ROC (Receiver operating characteristic) là đồ thị dạng đường cong, một trong những phương pháp phổ biến để đánh giá mô hình phân loại, sử dụng 2 giá trị đó chính là tỷ lệ đạt được True Positive trong tổng số các giá trị thực Positive (chính là giá trị Sensitivity) và tỷ lệ bị False Positive trong tổng số các giá trị thực Positive (chính là giá trị 1 – Specificity), các bạn có thể xem lại các công thức ở phần Confusion matrix.

Đường cong càng mở rộng sang phía bên trái tức mô hình càng hiệu quả trong việc phân loại (đường chéo thể hiện giá trị của các chỉ số từ mô hình phân loại ngẫu nhiên) AUC (area under the curve) để định lượng độ hiệu quả của mô hình dựa trên tính toán diện tích nằm đằng sau đường cong. Tại sao lại phải tính đến AUC? Ví dụ khi so sánh giữa 2 mô hình nếu chỉ dựa vào đường cong ROC chúng ta sẽ khó nhìn rõ được đường cong nào tiến gần hơn bên phía góc trái nên khó xác định được mô hình nào thực sự hiệu quả hơn. Chúng ta sẽ xem xét diện tích AUC, là phần diện tích từ trục hoành đi lên bị giới hạn bởi đường cong, khi ấy nếu ROC tiến gần hơn đến góc trái thì diện tích AUC sẽ lớn hơn, độ hiệu quả của mô hình sẽ cao hơn (AUC có giá trị từ 0 đến 1 nếu không xét Sensitivity và 1 – Specificity theo tỷ lệ % mà từ 0 đến 1).

Đến đây là kết thúc bài viết về phương pháp đánh giá mô hình phân loại. Còn rất nhiều phương pháp đánh giá khác nhưng chúng tôi không trình bày được trong bài viết này mong các bạn thông cảm và tiếp tục ủng hộ BigDataUni trong các bài viết sắp tới.

Về chúng tôi, công ty BigDataUni với chuyên môn và kinh nghiệm trong lĩnh vực khai thác dữ liệu sẵn sàng hỗ trợ các công ty đối tác trong việc xây dựng và quản lý hệ thống dữ liệu một cách hợp lý, tối ưu nhất để hỗ trợ cho việc phân tích, khai thác dữ liệu và đưa ra các giải pháp. Các dịch vụ của chúng tôi bao gồm “Tư vấn và xây dựng hệ thống dữ liệu”, “Khai thác dữ liệu dựa trên các mô hình thuật toán”, “Xây dựng các chiến lược phát triển thị trường, chiến lược cạnh tranh”.

error: Content is protected !!