Lập mô hình hồi quy trong Ads Data Hub

Hồi quy tuyến tính và hồi quy logistic là các mô hình học máy cho phép bạn đưa ra các dự đoán có ý nghĩa từ dữ liệu quảng cáo.

  • Hồi quy tuyến tính tạo một hàm để điều chỉnh đường thẳng phù hợp với dữ liệu sao cho giảm thiểu khoảng cách giữa các điểm dữ liệu và đường. Sau đó, mô hình này có thể được dùng để dự đoán giá trị số dựa trên dữ liệu đầu vào, chẳng hạn như dự đoán giá trị vòng đời của người dùng dựa trên giao dịch mua hàng, lượt tương tác trước đó, v.v.
  • Phương pháp hồi quy logic được dùng cho các bài toán phân loại có tính dự đoán. Mô hình này có thể là một trong 2 loại tuỳ thuộc vào số lượng biến mà bạn cung cấp:
    • Hồi quy logistic nhị phân trả lời "có/không" câu hỏi, chẳng hạn như khả năng một sự kiện chuyển đổi sẽ xảy ra.
    • Hồi quy logistic đa lớp được dùng để dự đoán nhiều giá trị có thể có, chẳng hạn như xác định xem một khách hàng là "có giá trị thấp", "có giá trị trung bình" hay "có giá trị cao".

Hồi quy tuyến tính và hồi quy logit đều học từ dữ liệu huấn luyện (trong trường hợp này là dữ liệu quảng cáo của bạn), cung cấp cho bạn mô hình dự đoán để đưa ra các quyết định quảng cáo. Nhìn chung, việc cung cấp thêm dữ liệu và đảm bảo rằng dữ liệu bạn cung cấp có chất lượng cao sẽ giúp cải thiện độ chính xác của mô hình. Cả hai mô hình đều hoạt động tốt hơn khi được cung cấp dữ liệu huấn luyện được phân cụm chặt chẽ.

Sự riêng tư biệt lập

Hồi quy tuyến tính và hồi quy logit đều sử dụng sự riêng tư biệt lập. Đây là một hệ thống kiểm tra quyền riêng tư khác với các hoạt động khác trong Ads Data Hub. Sự riêng tư biệt lập đảm bảo quyền riêng tư của người dùng cuối bằng cách chèn nội dung nhiễu vào kết quả của bạn trong quá trình huấn luyện. Mức độ nhiễu này duy trì đủ thấp để kết quả cuối cùng vẫn hữu ích, nhưng đủ cao để không thể xác định người dùng cuối. Ngoài ra, mức độ nhiễu là không xác định, do đó, kết quả có mức độ nhiễu không nhất quán, giúp đảm bảo quyền riêng tư của người dùng cuối.

Giới hạn truy vấn

Bạn chỉ được có 100 truy vấn lập mô hình hồi quy tuyến tính và logistic cho mỗi "ngày dữ liệu" khi sử dụng EPSILON_PER_MODEL mặc định. Ngày dữ liệu là các sự kiện được tạo vào một ngày nhất định. Những sự kiện này tương ứng với ngày bắt đầu và ngày kết thúc mà bạn cung cấp khi chạy truy vấn, cũng như ngày bắt đầu và ngày kết thúc được dùng khi tạo bất kỳ bảng nào mà truy vấn của bạn sử dụng (chẳng hạn như bảng tạm thời dùng để huấn luyện). Điều này có nghĩa là bạn chỉ có thể sử dụng dữ liệu trong 1 ngày cho không quá 100 mô hình. Nếu chọn chỉ định giá trị EPSILON_PER_MODEL lớn hơn giá trị mặc định, bạn sẽ có thể tạo ít mô hình hơn nhưng chúng sẽ có chất lượng cao hơn. Và nếu chọn các giá trị EPSILON_PER_MODEL nhỏ hơn, bạn có thể huấn luyện nhiều mô hình hơn, nhưng các mô hình đó sẽ có chất lượng thấp hơn.

Cách hoạt động

Quy trình làm việc tuân thủ các bước cần thiết sau đây:

  1. Chuẩn bị dữ liệu huấn luyện.
  2. Tạo mô hình.
  3. Thu thập thông tin chi tiết từ mô hình.

Chuẩn bị dữ liệu huấn luyện

Như đã đề cập ở trên, việc sử dụng tập dữ liệu lớn hơn, chất lượng cao thường sẽ mang lại kết quả tốt hơn. Ngoài ra, do dữ liệu đầu vào được chia tỷ lệ bằng tỷ lệ tối thiểu, nên dữ liệu được phân cụm thưa thớt hoặc dữ liệu có các điểm ngoại lai đáng kể có thể ảnh hưởng xấu đến mô hình do thay đổi giá trị trung bình.

Theo mặc định, Ads Data Hub chọn ngẫu nhiên 18% dữ liệu huấn luyện của bạn để dùng cho việc xác thực. Tuỳ chọn data_split_eval_fraction có thể kiểm soát tỷ lệ phần trăm dữ liệu được dùng để xác thực.

Tạo mô hình

Chỉ định các tham số và dữ liệu đầu vào để huấn luyện mô hình của bạn.

Các phương pháp hay nhất

Một trong những yếu tố quan trọng nhất ảnh hưởng đến chất lượng của mô hình là quy mô của tập huấn luyện. Tuy nhiên, sự đánh đổi về quy mô/chất lượng sẽ khác nhau tuỳ thuộc vào vấn đề và các yếu tố được nêu bên dưới. Vui lòng cho chúng tôi biết trải nghiệm của bạn.

  • Chúng tôi nhận thấy độ chính xác > 0,70 đối với các mô hình hồi quy logistic được xây dựng từ các tập huấn luyện với ít nhất 100.000 người dùng.
  • Chúng ta thấy hệ số r bình phương > 0,70 đối với mô hình hồi quy tuyến tính xây dựng từ tập huấn luyện với ít nhất 800.000 người dùng.

Có những yếu tố khác có thể làm giảm chất lượng của mô hình.

  • Mô hình hậu cần trong đó một lớp được đại diện nhiều hơn nhiều so với các lớp khác. Cụ thể là khi một nhãn có ít người dùng bộ huấn luyện, việc có nhiều người dùng bộ huấn luyện với các nhãn khác có thể sẽ không giúp cải thiện độ chính xác của mô hình trên nhãn nhỏ. Ví dụ: 20.000 & 1.000 người dùng bộ đào tạo cho hai nhãn kém hơn 10.000 & 2.000.
  • Tính năng dữ liệu không cung cấp tín hiệu mạnh cho nhãn.
  • Dữ liệu thô cần kỹ thuật trích xuất tính năng chuyên sâu hơn. Ví dụ: một số trường có thể có rất nhiều giá trị có thể có. Một cách để cải thiện dữ liệu thuộc loại này là chuyển đổi các giá trị thành một đối tượng có số lượng danh mục hoặc nhóm nhỏ hơn.

Thu thập thông tin chi tiết

Bạn có thể gọi các hàm để đánh giá hiệu suất của mô hình dựa trên dữ liệu xác thực, kiểm tra các tính năng và thông tin về vòng lặp huấn luyện (chẳng hạn như trọng số cơ bản mà mô hình sử dụng trong quá trình dự đoán) và dự đoán về dữ liệu chưa xem được.

TẠO câu lệnh MÔ HÌNH

Câu lệnh CREATE MODEL sẽ tạo một mô hình theo tên và tập dữ liệu mà bạn chỉ định. Nếu tên mô hình đã tồn tại, CREATE MODEL sẽ thay thế mô hình hiện tại.

Cú pháp TẠO MÔ HÌNH

CREATE MODEL
model_name
OPTIONS
(
  // model_option_list:
  // Required parameter.
  MODEL_TYPE = { 'ADH_LINEAR_REGRESSION' | 'ADH_LOGISTIC_REGRESSION'}

  // Optional tuning parameters.
  [, L1_REG = float64_value ]
  [, L2_REG = float64_value ]
  [, DATA_SPLIT_EVAL_FRACTION = float64_value ]
  [, OPTIMIZE_STRATEGY = { 'AUTO_STRATEGY' | 'BATCH_GRADIENT_DESCENT' |
                           'NORMAL_EQUATION' } ]
  [, MAX_ITERATIONS = int64_value ]
  [, LEARN_RATE_STRATEGY = { 'LINE_SEARCH' | 'CONSTANT' } ]
  [, LEARN_RATE = float64_value ]
  [, EARLY_STOP = { TRUE | FALSE } ]
  [, MIN_REL_PROGRESS = float64_value ]
  [, LS_INIT_LEARN_RATE = float64_value ]
  [, EPSILON_PER_MODEL = float64_value ]
  [, AUTOMATIC_IMPUT_SCALING = bool_value ]
  [, MIN_MAX_SCALED_COLS = [string_value, string_value... ] ]
  [, STANDARD_SCALED_COLS = [string_value, string_value... ] ]
  [, QUANTILE_BUCKETIZED_COLS = [
        STRUCT(string_value AS col_name, int64_value AS num_buckets), 
       STRUCT(string_value AS col_name, int64_value AS num_buckets)... ] ]
)
AS query_statement

model_name

Tên gồm chữ và số, bao gồm cả dấu gạch dưới và dấu gạch ngang. Không được thêm dấu chấm. Nếu tên mô hình mà bạn cung cấp đã tồn tại, mô hình cũ hơn sẽ bị ghi đè.

query_statement

Chỉ định truy vấn SQL chuẩn dùng để tạo dữ liệu huấn luyện. Nếu bạn đang tạo nhiều mô hình sử dụng cùng một dữ liệu huấn luyện, hãy tạo một bảng tạm thời chứa dữ liệu huấn luyện và tham chiếu bảng đó tại đây. Chiến thuật này giúp tránh các lỗi kiểm tra sự khác biệt có thể xảy ra do bị xoá sạch hoặc thư rác trễ.

model_option_list

model_type

(Bắt buộc) Lựa chọn bắt buộc duy nhất. Có thể là "adh_linear_regression" hoặc "adh_logistic_regression"

l1_reg

(Không bắt buộc) Mức điều chỉnh L1 đã áp dụng. Điều chỉnh L1 phạt trọng số tương ứng với tổng giá trị tuyệt đối của trọng số. Có thể là một số không âm, giá trị mặc định là 0.

l2_reg

(Không bắt buộc) Mức điều chỉnh L2 đã áp dụng. Điều chỉnh L2 sẽ phạt trọng số theo tỷ lệ căn bậc hai của tổng các bình phương của trọng số. Có thể là một số không âm, giá trị mặc định là 0.

data_split_eval_fraction

(Không bắt buộc) Phải nằm trong khoảng từ ,01 đến ,99, với giá trị mặc định là ,18. Xác định phần dữ liệu được kết thúc trong tập dữ liệu đánh giá. Điều này ảnh hưởng đến độ chính xác của mô hình bằng cách giảm số lượng hàng kết thúc trong mô hình, nhưng cũng làm tăng số lượng mô hình mà người dùng có thể chạy. Sau đây là biểu đồ về mối quan hệ đó, giả sử MỌI mô hình trên một tập dữ liệu cho trước có cùng phân số:

Tỷ lệ xác thực Cụm từ tìm kiếm được phép
0,01 7
0,1 8
0,15 8
0,18 9
0,2 9
0,3 10
0,5 14
0,9 50

optimize_strategy

(Không bắt buộc) Chiến lược để huấn luyện mô hình hồi quy tuyến tính.

Đối số

"AUTO_STRATEGY" xác định chiến lược huấn luyện như sau:

  • Nếu bạn chỉ định l1_reg hoặc warm_start, thì chiến lược batch_gradient_descent sẽ được sử dụng.
  • Nếu tổng số lượng giá trị riêng biệt của các tính năng huấn luyện lớn hơn 10.000, thì chiến lược batch_gradient_descent sẽ được sử dụng.
  • Nếu có vấn đề quá phù hợp (số lượng ví dụ huấn luyện ít hơn 10 • tổng số lượng giá trị riêng biệt), thì chiến lược batch_gradient_descent sẽ được sử dụng.
  • Chiến lược NORMAL_EQUATION được dùng cho tất cả các trường hợp khác.

"BATCH_GRADIENT_DESCENT" (chỉ áp dụng cho công tác logistic) huấn luyện mô hình bằng phương pháp giảm độ dốc theo lô, phương pháp này tối ưu hoá hàm mất đi bằng cách sử dụng hàm chuyển màu.

"NORMAL_EQUATION" (chỉ tuyến tính) trực tiếp tính toán bình phương tối thiểu của bài toán hồi quy tuyến tính bằng công thức phân tích. Không thể sử dụng phương trình thông thường trong các trường hợp sau:

  • Đã chỉ định l1_reg.
  • Đã chỉ định warm_start.
  • Tổng số lượng giá trị riêng biệt của các tính năng huấn luyện lớn hơn 10.000.
  • Giá trị mặc định là "AUTO_STRATEGY".

max_iterations

(Không bắt buộc) Số lần lặp lại hoặc bước huấn luyện. Vì truy vấn này tạo một cây cho mỗi lần lặp, nên đây cũng là số lượng cây. Phải là số nguyên lớn hơn 1. Giá trị mặc định là 20.

learn_rate_strategy

(Không bắt buộc, chỉ dành cho khâu hậu cần) Chiến lược xác định tốc độ học tập trong quá trình đào tạo.

Đối số

"LINE_SEARCH" dùng phương pháp tìm kiếm theo dòng để tính tốc độ học. Tốc độ học ban đầu của lượt tìm kiếm dòng là giá trị được chỉ định cho LS_INIT_LEARN_RATE .

  • Tính năng tìm kiếm theo dòng làm chậm quá trình huấn luyện và tăng số byte được xử lý, nhưng thường hội tụ ngay cả với tốc độ học lớn hơn được chỉ định ban đầu.

"CONSTANT" đặt tốc độ học thành giá trị được chỉ định cho LEARN_RATE.

Giá trị mặc định là "LINE_SEARCH".

learn_rate

(Không bắt buộc, chỉ dành cho hậu cần) Tốc độ học để giảm độ dốc khi bạn đặt LEARN_RATE_STRATEGY thành CONSTANT. Nếu bạn đặt LEARN_RATE_STRATEGY thành "LINE_SEARCH", thì hệ thống sẽ trả về một lỗi.

Đối số

float64_value có thể là số có dấu phẩy động 64 bit bất kỳ. Giá trị mặc định là 0,1 (10%).

early_stop

(Không bắt buộc) Liệu có nên dừng quá trình huấn luyện sau lần lặp đầu tiên mà mức cải thiện tổn thất tương đối nhỏ hơn giá trị được chỉ định cho MIN_REL_PROGRESS hay không.

Đối số

TRUE cho "yes", FALSE cho "no". Giá trị mặc định là TRUE.

min_rel_progress

(Không bắt buộc) Mức cải thiện mức tổn thất tương đối tối thiểu cần thiết để tiếp tục huấn luyện khi EARLY_STOP được đặt thành true. Ví dụ: giá trị 0, 01 chỉ định rằng mỗi lần lặp lại phải giảm mức mất đi 1% để quá trình huấn luyện tiếp tục.

Đối số

float64_value có thể là số có dấu phẩy động 64 bit bất kỳ. Giá trị mặc định là 0,1 (10%).

ls_init_learn_rate

(Không bắt buộc) Đặt tốc độ học ban đầu mà LEARN_RATE_STRATEGY='LINE_SEARCH' sử dụng. Bạn chỉ có thể sử dụng tuỳ chọn này nếu đã chỉ định LINE_SEARCH.

Nếu LEARN_RATE của mô hình có vẻ như tăng gấp đôi số lần lặp lại theo chỉ báo của ML.TRAINING_INFO, hãy thử đặt LS_INIT_LEARN_RATE thành tốc độ học gấp đôi gần đây nhất. Tốc độ học ban đầu tối ưu là khác nhau đối với mỗi mô hình. Tỷ lệ học ban đầu tốt đối với một mô hình có thể không phải là tỷ lệ học ban đầu tốt cho một mô hình khác.

Đối số

float64_value có thể là số có dấu phẩy động 64 bit bất kỳ.

epsilon_per_model

(Không bắt buộc) Chỉ định mức ngân sách quyền riêng tư sẽ dùng để huấn luyện mô hình này. Mỗi khách hàng sử dụng dữ liệu quảng cáo được cấp ngân sách quyền riêng tư là 10,0 mỗi ngày dữ liệu. Mô hình được huấn luyện thành công sẽ chi tiêu ngân sách EPSILON_PER_MODEL cho mỗi ngày dữ liệu trong phạm vi ngày được chỉ định khi chạy truy vấn. Giá trị mặc định l n(3)/10 cho phép tạo khoảng 100 mô hình. Nếu sử dụng giá trị cao hơn, bạn sẽ có thể tạo ít mô hình hơn nhưng chúng sẽ có chất lượng cao hơn. Nếu sử dụng giá trị nhỏ hơn, bạn sẽ có thể tạo thêm nhiều mô hình có chất lượng thấp hơn.

Đối số

float64_value có thể là bất kỳ số thực dấu phẩy động 64 bit dương nào nhỏ hơn ln(3), tức là khoảng 1,0986. Giá trị mặc định là ln(3)/10.

automatic_input_scaling

(Không bắt buộc) Khi TRUE, tất cả các cột tính năng dạng số sẽ tự động áp dụng min_max_scaling, như thể tên cột được gọi rõ ràng trong tuỳ chọn min_max_scaled_cols, ngoại trừ các cột đã được gọi rõ ràng trong tuỳ chọn standard_scaled_cols hoặc quantile_bucketized_cols.

Đối số

bool_valueBOOL, giá trị mặc định là TRUE.

min_max_scaled_cols

(Không bắt buộc) Điều chỉnh tỷ lệ từng cột thuộc tính biểu thức số được chỉ định trong phạm vi từ 0 đến 1, được giới hạn bằng MINMAX trên tất cả các hàng. MINMAX giống nhau sẽ tự động được dùng trong cụm từ gợi ý. Nếu dữ liệu dự đoán nằm ngoài phạm vi MIN hoặc MAX, thì dữ liệu dự đoán sẽ bị giới hạn ở mức 0 hoặc 1.

Đối số

Mảng string_value, trong đó mỗi string_value là một CHUẨN đại diện cho tên cột cần được chuyển đổi.

standard_scaled_cols

(Không bắt buộc) Chuẩn hoá các cột tính năng numerical_expression được chỉ định trên tất cả các hàng. STDDEVMEAN được tính toán để chuẩn hoá biểu thức sẽ tự động được dùng trong dự đoán.

Đối số

Mảng string_value, trong đó mỗi string_value là một STRING đại diện cho tên cột cần được chuyển đổi.

quantile_bucketized_cols

Sắp xếp các cột tính năng dạng số liên tục được chỉ định vào một STRING, trong đó tên bộ chứa là giá trị dựa trên số phân vị. Các số phân vị tương tự sẽ tự động được dùng trong dự đoán.

Đối số

Mảng STRUCT(string_value AS col_name, int64_value AS num_buckets), trong đó mỗi string_value là một STRING đại diện cho tên cột số liên tục sẽ được chuyển đổi và mỗi int64_value là số nhóm để chia các giá trị số.

Xác thực

  • Mỗi ngày dữ liệu trong phạm vi ngày được chỉ định cho truy vấn này phải có đủ ngân sách quyền riêng tư, tức là lớn hơn EPSILON_PER_MODEL, nếu không truy vấn sẽ không thành công.
  • Các tham số điều chỉnh không bắt buộc, nếu được chỉ định, sẽ được xác thực cho các phạm vi hiển thị ở trên.
  • Bạn chỉ phải chỉ định rõ một thông số model_type bắt buộc.
  • Một cột trong tập huấn luyện phải được đặt tên là "label". Hiện chưa hỗ trợ nhiều nhãn.
  • Cột nhãn không được chứa giá trị NULL. Nếu cột nhãn chứa giá trị NULL thì truy vấn sẽ không thành công.
  • Không có cột tính năng nào có thể bắt nguồn từ user_id.
  • Mỗi hàng phải đại diện cho đúng một người dùng duy nhất. Một hàng không thể biểu thị dữ liệu của nhiều người dùng. Điều này có thể xảy ra với một số kết hợp nhất định, ví dụ: THAM GIA CHÉO.
  • Không có người dùng nào có thể ở hai hàng riêng biệt.
  • Vì lý do liên quan đến quyền riêng tư, bạn chỉ có thể sử dụng các lựa chọn được mô tả trong phần cú pháp. Những lựa chọn khác có thể có trong tài liệu truy vấn MÔ HÌNH TẠO BQML hiện chưa được hỗ trợ.

Các hàm đánh giá

ML.EVALUATE

Sử dụng hàm ML.EVALUATE để đánh giá các chỉ số của mô hình. Bạn có thể sử dụng hàm ML.EVALUATE với mô hình hồi quy tuyến tính hoặc hồi quy logistic.

SELECT
  *
FROM ML.EVALUATE(MODEL `linear_model_test`);

ML.ROC_CURVE

Sử dụng hàm ML.ROC_CURVE để đánh giá các chỉ số cụ thể cho hồi quy logistic. ML.ROC_CURVE chỉ đánh giá các mô hình hồi quy logit.

SELECT
  *
FROM ML.ROC_CURVE(MODEL `logistic_model_test`);

Hàm dự đoán

ML.PREDICT

Bạn có thể dùng hàm ML.PREDICT để dự đoán kết quả bằng mô hình này. Kết quả thu được khi sử dụng ML.PREDICT cũng phải trải qua các bước kiểm tra để đảm bảo quyền riêng tư giống như các kết quả khác trong Ads Data Hub. Tìm hiểu thêm về các chế độ kiểm tra để đảm bảo quyền riêng tư

Hồi quy tuyến tính

/* This example outputs the average value for labels that the model predicted */
SELECT
  AVG(predicted_label) AS average_predicted_label
FROM
  ML.PREDICT(MODEL `linear_model_test`, TABLE tmp.linear_training_set);

Hồi quy logistic

/* This example outputs the model's prediction and probabilities for said prediction over individual users. It groups by label and prediction, counting the number of users in each prediction */
SELECT
  label,
  predicted_label, /* one of the two input labels, depending on which label has the higher predicted probability */
  COUNT(*) AS num /* a tally of users */
FROM
  ML.PREDICT(MODEL `logistic_model_test`, TABLE tmp.logistic_training_set)
GROUP BY 1, 2;

Các hàm kiểm tra mô hình và tính năng

ML.TRAINING_INFO

Hàm ML.TRAINING_INFO cho phép bạn xem thông tin về các lần lặp lại huấn luyện của một mô hình.

SELECT
  *
FROM ML.TRAINING_INFO(MODEL `logistic_model_test`);

ML.FEATURE_INFO

Hàm ML.FEATURE_INFO cho phép bạn xem thông tin về các tính năng đầu vào dùng để huấn luyện một mô hình

SELECT
  *
FROM ML.FEATURE_INFO(MODEL `logistic_model_test`);

ML.WEIGHTS

Hàm ML.WEIGHTS cho phép bạn xem các trọng số cơ bản mà mô hình sử dụng trong quá trình dự đoán.

SELECT
  *
FROM ML.WEIGHTS(MODEL `linear_model_test`);

Ví dụ

Tạo mô hình

Các ví dụ sau đều sử dụng bảng mẫu natality để minh hoạ cách tạo mô hình.

Dữ liệu huấn luyện trong nội dung chọn lọc (tuyến tính)

Ví dụ sau đây sử dụng cân nặng khi sinh, giới tính, tuần mang thai, tuổi mẹ và chủng tộc của người mẹ để dự đoán cân nặng khi sinh của trẻ.

CREATE MODEL `natality_model`
OPTIONS
  (model_type='adh_linear_regression') AS
SELECT
  weight_pounds as label,
  is_male,
  gestation_weeks,
  mother_age,
  CAST(mother_race AS string) AS mother_race
FROM
  `bigquery-public-data.samples.natality`
WHERE
  weight_pounds IS NOT NULL

Dữ liệu huấn luyện trong nội dung chọn lọc (khoa học)

Ví dụ sau đây sử dụng cân nặng khi sinh, giới tính, số tuần mang thai, tuổi mẹ và chủng tộc của người mẹ để dự đoán giới tính của trẻ.

CREATE MODEL `natality_model`
OPTIONS
  (model_type='adh_logistic_regression') AS
SELECT
  weight_pounds,
  is_male as label,
  gestation_weeks,
  mother_age,
  CAST(mother_race AS string) AS mother_race
FROM
  `bigquery-public-data.samples.natality`
WHERE
  weight_pounds IS NOT NULL