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 tạo các thông tin 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 khớp với một đường kẻ với dữ liệu sao cho khoảng cách giữa các điểm dữ liệu và đường được giảm thiểu. Sau đó, mô hình này có thể được dùng để dự đoán một 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, hoạt động tương tác trước đó, v.v.
  • Hồi quy logic được dùng cho các bài tập phân loại có tính dự đoán. Mô hình này có thể thuộc 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 giúp trả lời các câu hỏi "có/không", chẳng hạn như khả năng xảy ra sự kiện chuyển đổi.
    • 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 khách hàng là "giá trị thấp", "giá trị trung bình" hay "giá trị cao".

Hồi quy tuyến tính và hồi quy logistic đều học từ dữ liệu đào tạo (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. Nói chung, việc cung cấp nhiều dữ liệu hơn và đảm bảo rằng dữ liệu bạn cung cấp có chất lượng cao sẽ cải thiện độ chính xác của mô hình. Cả hai mô hình đều hoạt động hiệu quả hơn khi được cung cấp dữ liệu huấn luyện được nhóm chặt chẽ.

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

Hồi quy tuyến tính và hồi quy logistic đề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 hệ thống các hoạt động khác trong Ads Data Hub sử dụng. 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 đưa dữ liệu nhiễu vào kết quả trong quá trình huấn luyện. Mức độ nhiễu này vẫn đủ thấp để kết quả cuối cùng vẫn hữu ích, nhưng vẫn đủ cao để hệ thống không thể xác định người dùng cuối. Ngoài ra, độ nhiễu là không xác định, khiến kết quả 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 tạo tối đa 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 đề cập đến 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ảng bất kỳ mà truy vấn của bạn sử dụng (chẳng hạn như các bảng tạm thời dùng để huấn luyện). Điều này có nghĩa là chỉ có thể sử dụng dữ liệu trong 1 ngày trong không quá 100 mô hình. Nếu bạn chọn chỉ định một giá trị EPSILON_PER_MODEL lớn hơn giá trị mặc định, thì bạn có thể tạo ít mô hình hơn nhưng các mô hình đó 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 thêm mô hình, nhưng các mô hình đó sẽ có chất lượng thấp hơn.

Cách thức hoạt động

Quy trình làm việc tuân theo các bước quan trọng sau:

  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 các 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, vì dữ liệu đầu vào được điều chỉnh theo tỷ lệ bằng cách sử dụng tỷ lệ tối đa tối đa, nên dữ liệu hoặc dữ liệu được phân cụm thưa thớt có ngoại lệ đáng kể có thể ảnh hưởng xấu đến mô hình do dịch chuyển 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. Bạn có thể kiểm soát tỷ lệ phần trăm dữ liệu dùng để xác thực bằng tuỳ chọn data_split_eval_fraction.

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.

Những phương pháp hay nhất

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

  • Chúng tôi đã thấy độ chính xác > 0,70 cho 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 tôi đã thấy r-squared > 0,70 cho các mô hình hồi quy tuyến tính được xây dựng từ các tập huấn luyện với ít nhất 800.000 người dùng.

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

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

TẠO câu lệnh MODEL

Câu lệnh CREATE MODEL sẽ tạo một mô hình có 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.

TẠO cú pháp MODEL

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 dạng chữ và số, bao gồm cả dấu gạch dưới và dấu gạch ngang. Không được chứa 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 bằng cách 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 có dữ liệu huấn luyện rồi tham khảo 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 xoá sạch hoặc thư rác trễ.

model_option_list

model_type

(Bắt buộc) Tùy 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) Lượng chính quy L1 đã áp dụng. Quy trình chính quy L1 sẽ phạt các trọng số theo tỷ lệ với tổng giá trị tuyệt đối của các trọng số. Có thể là bất kỳ số âm nào, giá trị mặc định là 0.

l2_reg

(Không bắt buộc) Lượng chính quy L2 đã áp dụng. Quy trình chính quy L2 phạt các trọng số theo tỷ lệ căn bậc hai của tổng các bình phương của các trọng số. Có thể là bất kỳ số âm nào, 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ừ 0,01 đến 0,99, với giá trị mặc định là 0,18. Xác định tỷ lệ dữ liệu kết thúc trong tập hợp đá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ố hàng dẫn đến mô hình nhưng cũng tăng số lượng mô hình mà người dùng có thể chạy. Dưới đâ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 nhất định đều có cùng một phân số:

Tỷ lệ xác thực Truy vấn đượ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 để đào tạo 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, 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 đề về việc áp dụng quá mức (số lượng ví dụ huấn luyện ít hơn 10 • tổng số lượng giá trị riêng biệt), chiến lược batch_gradient_descent sẽ được sử dụng.
  • Chiến lược NORMAL_EQUATION được sử dụng cho tất cả các trường hợp khác.

"BATCH_GRADIENT_DESCENT" (chỉ dành cho dịch vụ hậu cần) huấn luyện mô hình bằng phương thức giảm độ dốc theo lô. Phương thức này tối ưu hoá hàm mất dữ liệu 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 chuẩn trong các trường hợp sau:

  • l1_reg đã được chỉ định.
  • warm_start đã được chỉ định.
  • Tổng số lượng giá trị riêng biệt của các tính năng huấn luyện là 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 số 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 lại, 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ỉ hỗ trợ hậu cần) Chiến lược xác định tốc độ học trong quá trình huấn luyện.

Đối số

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

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

"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", 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ỳ. Mặc định là 0,1 (10%).

early_stop

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

Đối số

TRUE cho "có", FALSE cho "không". Giá trị mặc định là TRUE.

min_rel_progress

(Không bắt buộc) Mức cải thiện tỷ lệ mất tương đối tối thiểu cần thiết để tiếp tục huấn luyện khi bạn đặt EARLY_STOP thành true. Ví dụ: giá trị 0.01 chỉ định mỗi lần lặp phải giảm tổn thất 1% để 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ỳ. 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 dường như đang tăng gấp đôi mọi vòng lặp như được ML.TRAINING_INFO chỉ báo, hãy thử đặt LS_INIT_LEARN_RATE thành tốc độ học nhân đôi gần nhất. Tốc độ tìm hiểu ban đầu tối ưu là khác nhau đối với mỗi mô hình. Tỷ lệ tìm hiểu 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 đối với 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 số tiền ngân sách quyền riêng tư sẽ được 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 sẽ được cấp ngân sách quyền riêng tư là 10 USD/ngày. Mô hình được huấn luyện thành công sẽ chi tiêu EPSILON_PER_MODEL của ngân sách cho mỗi ngày dữ liệu trong phạm vi ngày được chỉ định khi chạy truy vấn. Sử dụng giá trị mặc định là ln(3)/10 sẽ cho phép tạo khoảng 100 mô hình. Nếu sử dụng giá trị cao hơn, bạn có thể tạo ít mô hình hơn nhưng 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 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 nào nhỏ hơn ln(3), 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 được á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_value là một BOOL, 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 của tính năng biểu_thức_số được chỉ định trong phạm vi từ 0 đến 1, giới hạn bằng MINMAX trên tất cả các hàng. Cùng một MINMAX 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, 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ỖI đại diện cho tên cột cần 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 để chuẩn hoá biểu thức sẽ tự động được dùng trong phần 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 chuyển đổi.

quantile_bucketized_cols

Nhóm các cột tính năng số liên tục được chỉ định vào STRING với tên nhóm 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 hoạt động dự đoán.

Đối số

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

Xác nhận kết quả

  • 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à phải nhiều 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 dải ô nêu trên.
  • Bạn chỉ được chỉ định rõ ràng một tham số model_type cần thiết.
  • Một cột trong tập hợp huấn luyện phải được đặt tên là "label". Hiện chúng tôi không 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 thể lấy cột tính năng nào 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 được đại diện cho 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ố liên kết nhất định, ví dụ: CROSS JOIN.
  • Không người dùng nào có thể nằm trong 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 tuỳ chọn được mô tả trong phần cú pháp. Các lựa chọn khác có thể tìm thấy trong tài liệu về truy vấn TẠO MÔ HÌNH TẠO BQML hiện chưa được hỗ trợ.

Các hàm đánh giá

ML.EVALUATE

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 mô hình hồi quy logistic.

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

ML.ROC_CURVE

Dùng hàm ML.ROC_CURVE để đánh giá các chỉ số hồi quy logistic cụ thể. ML.ROC_CURVE chỉ đánh giá mô hình hồi quy logistic.

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

Các chức năng dự đoán

ML.PREDICT

Hàm ML.PREDICT có thể được dùng để dự đoán kết quả bằng mô hình này. Các kết quả thu được khi sử dụng ML.PREDICT đều phải trải qua quy trình 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ề quy trình 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 chức năng 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 vòng lặp 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 đây đề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 theo lựa chọn bên trong (tuyến tính)

Ví dụ sau đây sử dụng cân nặng khi sinh, giới tính, tuần thai, tuổi của mẹ và chủng tộc của người mẹ để dự đoán cân nặng khi sinh của một đứ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 theo phương pháp lựa chọn nội bộ (logistic)

Ví dụ sau đây sử dụng cân nặng khi sinh, giới tính, tuần thai, tuổi của người mẹ và chủng tộc của mẹ để dự đoán giới tính của một đứ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