bigquery-data-science 0.7.0__py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (286) hide show
  1. bigquery_data_science/__init__.py +58 -0
  2. bigquery_data_science/_skills/PLANS.md +76 -0
  3. bigquery_data_science/_skills/bigquery-ai/SKILL.md +66 -0
  4. bigquery_data_science/_skills/bigquery-ai/narrative/ai_agg.md +528 -0
  5. bigquery_data_science/_skills/bigquery-ai/narrative/ai_classify.md +450 -0
  6. bigquery_data_science/_skills/bigquery-ai/narrative/ai_count_tokens.md +180 -0
  7. bigquery_data_science/_skills/bigquery-ai/narrative/ai_detect_anomalies.md +322 -0
  8. bigquery_data_science/_skills/bigquery-ai/narrative/ai_embed.md +425 -0
  9. bigquery_data_science/_skills/bigquery-ai/narrative/ai_evaluate.md +368 -0
  10. bigquery_data_science/_skills/bigquery-ai/narrative/ai_forecast.md +437 -0
  11. bigquery_data_science/_skills/bigquery-ai/narrative/ai_generate.md +693 -0
  12. bigquery_data_science/_skills/bigquery-ai/narrative/ai_generate_bool.md +248 -0
  13. bigquery_data_science/_skills/bigquery-ai/narrative/ai_generate_double.md +254 -0
  14. bigquery_data_science/_skills/bigquery-ai/narrative/ai_generate_embedding.md +402 -0
  15. bigquery_data_science/_skills/bigquery-ai/narrative/ai_generate_int.md +252 -0
  16. bigquery_data_science/_skills/bigquery-ai/narrative/ai_generate_table.md +447 -0
  17. bigquery_data_science/_skills/bigquery-ai/narrative/ai_generate_text.md +356 -0
  18. bigquery_data_science/_skills/bigquery-ai/narrative/ai_if.md +373 -0
  19. bigquery_data_science/_skills/bigquery-ai/narrative/ai_key_drivers.md +331 -0
  20. bigquery_data_science/_skills/bigquery-ai/narrative/ai_parse_document.md +416 -0
  21. bigquery_data_science/_skills/bigquery-ai/narrative/ai_predict.md +559 -0
  22. bigquery_data_science/_skills/bigquery-ai/narrative/ai_score.md +310 -0
  23. bigquery_data_science/_skills/bigquery-ai/narrative/ai_search.md +465 -0
  24. bigquery_data_science/_skills/bigquery-ai/narrative/ai_similarity.md +371 -0
  25. bigquery_data_science/_skills/bigquery-ai/narrative/catalog_search.md +951 -0
  26. bigquery_data_science/_skills/bigquery-ai/narrative/content_analysis.md +284 -0
  27. bigquery_data_science/_skills/bigquery-ai/narrative/content_moderation.md +369 -0
  28. bigquery_data_science/_skills/bigquery-ai/narrative/data_enrichment.md +426 -0
  29. bigquery_data_science/_skills/bigquery-ai/narrative/document_intelligence.md +470 -0
  30. bigquery_data_science/_skills/bigquery-ai/narrative/document_rag.md +453 -0
  31. bigquery_data_science/_skills/bigquery-ai/narrative/image_deduplication.md +770 -0
  32. bigquery_data_science/_skills/bigquery-ai/narrative/log_analysis.md +668 -0
  33. bigquery_data_science/_skills/bigquery-ai/narrative/metric_diagnostics.md +568 -0
  34. bigquery_data_science/_skills/bigquery-ai/narrative/ml_annotate_image.md +680 -0
  35. bigquery_data_science/_skills/bigquery-ai/narrative/ml_generate_embedding.md +217 -0
  36. bigquery_data_science/_skills/bigquery-ai/narrative/ml_generate_text.md +223 -0
  37. bigquery_data_science/_skills/bigquery-ai/narrative/ml_process_document.md +392 -0
  38. bigquery_data_science/_skills/bigquery-ai/narrative/ml_transcribe.md +815 -0
  39. bigquery_data_science/_skills/bigquery-ai/narrative/ml_translate.md +600 -0
  40. bigquery_data_science/_skills/bigquery-ai/narrative/ml_understand_text.md +673 -0
  41. bigquery_data_science/_skills/bigquery-ai/narrative/multimodal_analysis.md +266 -0
  42. bigquery_data_science/_skills/bigquery-ai/narrative/rag_pipeline.md +593 -0
  43. bigquery_data_science/_skills/bigquery-ai/narrative/semantic_search.md +510 -0
  44. bigquery_data_science/_skills/bigquery-ai/narrative/tabular_prediction.md +485 -0
  45. bigquery_data_science/_skills/bigquery-ai/narrative/time_series_intelligence.md +489 -0
  46. bigquery_data_science/_skills/bigquery-ai/narrative/vector_search.md +672 -0
  47. bigquery_data_science/_skills/bigquery-ai/reference/augmented-analytics.md +77 -0
  48. bigquery_data_science/_skills/bigquery-ai/reference/cloud-ai-service-models.md +88 -0
  49. bigquery_data_science/_skills/bigquery-ai/reference/document-processing.md +95 -0
  50. bigquery_data_science/_skills/bigquery-ai/reference/embeddings-and-search.md +166 -0
  51. bigquery_data_science/_skills/bigquery-ai/reference/general-purpose-generation.md +87 -0
  52. bigquery_data_science/_skills/bigquery-ai/reference/managed-functions.md +72 -0
  53. bigquery_data_science/_skills/bigquery-ai/reference/predictive-ai.md +113 -0
  54. bigquery_data_science/_skills/bigquery-ai/reference/workflows.md +56 -0
  55. bigquery_data_science/_skills/bigquery-ai/skill.manifest.json +109 -0
  56. bigquery_data_science/_skills/bigquery-ai/syntax/INDEX.md +71 -0
  57. bigquery_data_science/_skills/bigquery-ai/syntax/aiagg.md +67 -0
  58. bigquery_data_science/_skills/bigquery-ai/syntax/aicausal_effect-covered-in-bigquery-ml.md +17 -0
  59. bigquery_data_science/_skills/bigquery-ai/syntax/aiclassify.md +72 -0
  60. bigquery_data_science/_skills/bigquery-ai/syntax/aicount_tokens.md +53 -0
  61. bigquery_data_science/_skills/bigquery-ai/syntax/aidetect_anomalies.md +63 -0
  62. bigquery_data_science/_skills/bigquery-ai/syntax/aiembed.md +85 -0
  63. bigquery_data_science/_skills/bigquery-ai/syntax/aievaluate.md +114 -0
  64. bigquery_data_science/_skills/bigquery-ai/syntax/aiforecast.md +123 -0
  65. bigquery_data_science/_skills/bigquery-ai/syntax/aigenerate.md +69 -0
  66. bigquery_data_science/_skills/bigquery-ai/syntax/aigenerate_bool.md +53 -0
  67. bigquery_data_science/_skills/bigquery-ai/syntax/aigenerate_double.md +45 -0
  68. bigquery_data_science/_skills/bigquery-ai/syntax/aigenerate_embedding.md +108 -0
  69. bigquery_data_science/_skills/bigquery-ai/syntax/aigenerate_int.md +45 -0
  70. bigquery_data_science/_skills/bigquery-ai/syntax/aigenerate_table.md +64 -0
  71. bigquery_data_science/_skills/bigquery-ai/syntax/aigenerate_text.md +167 -0
  72. bigquery_data_science/_skills/bigquery-ai/syntax/aiif.md +56 -0
  73. bigquery_data_science/_skills/bigquery-ai/syntax/aikey_drivers.md +76 -0
  74. bigquery_data_science/_skills/bigquery-ai/syntax/aiparse_document.md +91 -0
  75. bigquery_data_science/_skills/bigquery-ai/syntax/aipredict.md +74 -0
  76. bigquery_data_science/_skills/bigquery-ai/syntax/aiscore.md +52 -0
  77. bigquery_data_science/_skills/bigquery-ai/syntax/aisearch.md +66 -0
  78. bigquery_data_science/_skills/bigquery-ai/syntax/aisimilarity.md +79 -0
  79. bigquery_data_science/_skills/bigquery-ai/syntax/choosing-between-these-and-the-ai-functions.md +11 -0
  80. bigquery_data_science/_skills/bigquery-ai/syntax/hybrid-search-capability.md +165 -0
  81. bigquery_data_science/_skills/bigquery-ai/syntax/mlannotate_image.md +24 -0
  82. bigquery_data_science/_skills/bigquery-ai/syntax/mlgenerate_embedding.md +34 -0
  83. bigquery_data_science/_skills/bigquery-ai/syntax/mlgenerate_text.md +65 -0
  84. bigquery_data_science/_skills/bigquery-ai/syntax/mlprocess_document.md +125 -0
  85. bigquery_data_science/_skills/bigquery-ai/syntax/mltranscribe.md +26 -0
  86. bigquery_data_science/_skills/bigquery-ai/syntax/mltranslate.md +27 -0
  87. bigquery_data_science/_skills/bigquery-ai/syntax/mlunderstand_text.md +32 -0
  88. bigquery_data_science/_skills/bigquery-ai/syntax/multimodal-input-patterns-by-function.md +128 -0
  89. bigquery_data_science/_skills/bigquery-ai/syntax/object-tables.md +109 -0
  90. bigquery_data_science/_skills/bigquery-ai/syntax/objectref-and-objectrefruntime-schema-reference.md +50 -0
  91. bigquery_data_science/_skills/bigquery-ai/syntax/objfetch_metadata.md +49 -0
  92. bigquery_data_science/_skills/bigquery-ai/syntax/objget_access_url.md +66 -0
  93. bigquery_data_science/_skills/bigquery-ai/syntax/objget_read_url.md +40 -0
  94. bigquery_data_science/_skills/bigquery-ai/syntax/objlist.md +34 -0
  95. bigquery_data_science/_skills/bigquery-ai/syntax/objmake_ref.md +58 -0
  96. bigquery_data_science/_skills/bigquery-ai/syntax/per-row-failures-and-the-retry-pattern.md +19 -0
  97. bigquery_data_science/_skills/bigquery-ai/syntax/setup-apis-connection-roles.md +39 -0
  98. bigquery_data_science/_skills/bigquery-ai/syntax/two-input-shapes.md +22 -0
  99. bigquery_data_science/_skills/bigquery-ai/syntax/vector_search.md +78 -0
  100. bigquery_data_science/_skills/bigquery-ai/syntax/what-the-five-have-in-common.md +27 -0
  101. bigquery_data_science/_skills/bigquery-data-science/SKILL.md +69 -0
  102. bigquery_data_science/_skills/bigquery-data-science/reference/namespace-matrix.md +112 -0
  103. bigquery_data_science/_skills/bigquery-data-science/skill.manifest.json +13 -0
  104. bigquery_data_science/_skills/bigquery-ml/SKILL.md +70 -0
  105. bigquery_data_science/_skills/bigquery-ml/narrative/airflow_with_kfp.md +379 -0
  106. bigquery_data_science/_skills/bigquery-ml/narrative/anomaly_fraud_detection.md +195 -0
  107. bigquery_data_science/_skills/bigquery-ml/narrative/arima_plus.md +635 -0
  108. bigquery_data_science/_skills/bigquery-ml/narrative/arima_plus_xreg.md +453 -0
  109. bigquery_data_science/_skills/bigquery-ml/narrative/autoencoder.md +470 -0
  110. bigquery_data_science/_skills/bigquery-ml/narrative/automl_classifier.md +291 -0
  111. bigquery_data_science/_skills/bigquery-ml/narrative/automl_regressor.md +274 -0
  112. bigquery_data_science/_skills/bigquery-ml/narrative/boosted_tree_classifier.md +449 -0
  113. bigquery_data_science/_skills/bigquery-ml/narrative/boosted_tree_regressor.md +400 -0
  114. bigquery_data_science/_skills/bigquery-ml/narrative/bucketizing.md +201 -0
  115. bigquery_data_science/_skills/bigquery-ml/narrative/causal_effect.md +773 -0
  116. bigquery_data_science/_skills/bigquery-ml/narrative/churn_retention.md +271 -0
  117. bigquery_data_science/_skills/bigquery-ml/narrative/cloud_workflows.md +370 -0
  118. bigquery_data_science/_skills/bigquery-ml/narrative/composer_airflow.md +475 -0
  119. bigquery_data_science/_skills/bigquery-ml/narrative/contribution_analysis.md +346 -0
  120. bigquery_data_science/_skills/bigquery-ml/narrative/cross_validation.md +185 -0
  121. bigquery_data_science/_skills/bigquery-ml/narrative/customer_segmentation.md +233 -0
  122. bigquery_data_science/_skills/bigquery-ml/narrative/dataform.md +372 -0
  123. bigquery_data_science/_skills/bigquery-ml/narrative/dbt.md +283 -0
  124. bigquery_data_science/_skills/bigquery-ml/narrative/difference_in_differences.md +280 -0
  125. bigquery_data_science/_skills/bigquery-ml/narrative/distance.md +195 -0
  126. bigquery_data_science/_skills/bigquery-ml/narrative/dnn_classifier.md +326 -0
  127. bigquery_data_science/_skills/bigquery-ml/narrative/dnn_regressor.md +308 -0
  128. bigquery_data_science/_skills/bigquery-ml/narrative/embeddings_classification.md +426 -0
  129. bigquery_data_science/_skills/bigquery-ml/narrative/encoding.md +238 -0
  130. bigquery_data_science/_skills/bigquery-ml/narrative/ensembling.md +278 -0
  131. bigquery_data_science/_skills/bigquery-ml/narrative/evaluation.md +445 -0
  132. bigquery_data_science/_skills/bigquery-ml/narrative/exploration.md +779 -0
  133. bigquery_data_science/_skills/bigquery-ml/narrative/export.md +321 -0
  134. bigquery_data_science/_skills/bigquery-ml/narrative/feature_engineering.md +280 -0
  135. bigquery_data_science/_skills/bigquery-ml/narrative/feature_store.md +652 -0
  136. bigquery_data_science/_skills/bigquery-ml/narrative/feature_store_workflow.md +426 -0
  137. bigquery_data_science/_skills/bigquery-ml/narrative/ga4_churn_prediction.md +285 -0
  138. bigquery_data_science/_skills/bigquery-ml/narrative/hierarchical_forecasting.md +441 -0
  139. bigquery_data_science/_skills/bigquery-ml/narrative/image.md +791 -0
  140. bigquery_data_science/_skills/bigquery-ml/narrative/imported.md +426 -0
  141. bigquery_data_science/_skills/bigquery-ml/narrative/kmeans.md +348 -0
  142. bigquery_data_science/_skills/bigquery-ml/narrative/linear_regression.md +372 -0
  143. bigquery_data_science/_skills/bigquery-ml/narrative/logistic_regression.md +390 -0
  144. bigquery_data_science/_skills/bigquery-ml/narrative/matrix_factorization.md +404 -0
  145. bigquery_data_science/_skills/bigquery-ml/narrative/model_monitoring.md +609 -0
  146. bigquery_data_science/_skills/bigquery-ml/narrative/pca.md +357 -0
  147. bigquery_data_science/_skills/bigquery-ml/narrative/price_elasticity_dml.md +286 -0
  148. bigquery_data_science/_skills/bigquery-ml/narrative/propensity_score_matching.md +350 -0
  149. bigquery_data_science/_skills/bigquery-ml/narrative/random_forest_classifier.md +445 -0
  150. bigquery_data_science/_skills/bigquery-ml/narrative/random_forest_regressor.md +409 -0
  151. bigquery_data_science/_skills/bigquery-ml/narrative/recommendation.md +281 -0
  152. bigquery_data_science/_skills/bigquery-ml/narrative/regression_based_forecasting.md +491 -0
  153. bigquery_data_science/_skills/bigquery-ml/narrative/remote.md +428 -0
  154. bigquery_data_science/_skills/bigquery-ml/narrative/scalers.md +325 -0
  155. bigquery_data_science/_skills/bigquery-ml/narrative/scheduled_queries.md +284 -0
  156. bigquery_data_science/_skills/bigquery-ml/narrative/sql_scripting.md +243 -0
  157. bigquery_data_science/_skills/bigquery-ml/narrative/survival_analysis.md +363 -0
  158. bigquery_data_science/_skills/bigquery-ml/narrative/synthetic_control.md +221 -0
  159. bigquery_data_science/_skills/bigquery-ml/narrative/text.md +215 -0
  160. bigquery_data_science/_skills/bigquery-ml/narrative/time_series.md +669 -0
  161. bigquery_data_science/_skills/bigquery-ml/narrative/transform_only.md +273 -0
  162. bigquery_data_science/_skills/bigquery-ml/narrative/uplift_cate.md +241 -0
  163. bigquery_data_science/_skills/bigquery-ml/narrative/vertex_kfp.md +360 -0
  164. bigquery_data_science/_skills/bigquery-ml/narrative/wide_and_deep_classifier.md +316 -0
  165. bigquery_data_science/_skills/bigquery-ml/narrative/wide_and_deep_regressor.md +298 -0
  166. bigquery_data_science/_skills/bigquery-ml/reference/classification.md +80 -0
  167. bigquery_data_science/_skills/bigquery-ml/reference/model-management.md +90 -0
  168. bigquery_data_science/_skills/bigquery-ml/reference/preprocessing-functions.md +234 -0
  169. bigquery_data_science/_skills/bigquery-ml/reference/regression.md +79 -0
  170. bigquery_data_science/_skills/bigquery-ml/reference/unsupervised-and-specialized.md +101 -0
  171. bigquery_data_science/_skills/bigquery-ml/reference/workflows-and-pipelines.md +111 -0
  172. bigquery_data_science/_skills/bigquery-ml/skill.manifest.json +177 -0
  173. bigquery_data_science/_skills/bigquery-ml/syntax/1-model_type-catalog.md +28 -0
  174. bigquery_data_science/_skills/bigquery-ml/syntax/2-task-mlevaluate-metric-columns.md +26 -0
  175. bigquery_data_science/_skills/bigquery-ml/syntax/3-capability-matrix-per-model-type.md +21 -0
  176. bigquery_data_science/_skills/bigquery-ml/syntax/4-explainability-weights-functions.md +14 -0
  177. bigquery_data_science/_skills/bigquery-ml/syntax/5-connection-matrix.md +11 -0
  178. bigquery_data_science/_skills/bigquery-ml/syntax/6-which-model-free-function-no-create-model-no-connection.md +15 -0
  179. bigquery_data_science/_skills/bigquery-ml/syntax/7-point-in-time-feature-retrieval-which-of-the-two.md +11 -0
  180. bigquery_data_science/_skills/bigquery-ml/syntax/INDEX.md +111 -0
  181. bigquery_data_science/_skills/bigquery-ml/syntax/aicausal_effect.md +85 -0
  182. bigquery_data_science/_skills/bigquery-ml/syntax/arima_plus-forecasting-lifecycle-functions.md +14 -0
  183. bigquery_data_science/_skills/bigquery-ml/syntax/arima_plus-univariate-time-series-forecasting.md +132 -0
  184. bigquery_data_science/_skills/bigquery-ml/syntax/arima_plus_xreg-multivariate-time-series-with-external-regressors.md +103 -0
  185. bigquery_data_science/_skills/bigquery-ml/syntax/autoencoder.md +102 -0
  186. bigquery_data_science/_skills/bigquery-ml/syntax/automl_classifier-automl_regressor.md +88 -0
  187. bigquery_data_science/_skills/bigquery-ml/syntax/boosted_tree_classifier-boosted_tree_regressor.md +117 -0
  188. bigquery_data_science/_skills/bigquery-ml/syntax/contribution_analysis.md +113 -0
  189. bigquery_data_science/_skills/bigquery-ml/syntax/dnn_classifier-dnn_regressor.md +107 -0
  190. bigquery_data_science/_skills/bigquery-ml/syntax/dnn_linear_combined_classifier-dnn_linear_combined_regressor-wide-and-deep.md +98 -0
  191. bigquery_data_science/_skills/bigquery-ml/syntax/explainability-functions-mlexplain_predict-mlglobal_explain-mlfeature_importance.md +7 -0
  192. bigquery_data_science/_skills/bigquery-ml/syntax/exploratory-data-analysis-mldescribe_data-mlcorrelation.md +11 -0
  193. bigquery_data_science/_skills/bigquery-ml/syntax/export-model.md +92 -0
  194. bigquery_data_science/_skills/bigquery-ml/syntax/feature-engineering-standalone-preprocessing-functions.md +13 -0
  195. bigquery_data_science/_skills/bigquery-ml/syntax/image-preprocessing-functions-mldecode_image-mlresize_image-mlconvert_image_type-mlconvert_color_space.md +63 -0
  196. bigquery_data_science/_skills/bigquery-ml/syntax/imported-models-tensorflow-tensorflow_lite-onnx-xgboost.md +36 -0
  197. bigquery_data_science/_skills/bigquery-ml/syntax/kmeans.md +87 -0
  198. bigquery_data_science/_skills/bigquery-ml/syntax/linear_reg-logistic_reg-generalized-linear-models.md +101 -0
  199. bigquery_data_science/_skills/bigquery-ml/syntax/matrix_factorization.md +162 -0
  200. bigquery_data_science/_skills/bigquery-ml/syntax/mladvanced_weights.md +76 -0
  201. bigquery_data_science/_skills/bigquery-ml/syntax/mlarima_coefficients.md +30 -0
  202. bigquery_data_science/_skills/bigquery-ml/syntax/mlarima_evaluate.md +49 -0
  203. bigquery_data_science/_skills/bigquery-ml/syntax/mlbag_of_words.md +47 -0
  204. bigquery_data_science/_skills/bigquery-ml/syntax/mlbucketize.md +47 -0
  205. bigquery_data_science/_skills/bigquery-ml/syntax/mlcentroids.md +46 -0
  206. bigquery_data_science/_skills/bigquery-ml/syntax/mlconfusion_matrix.md +56 -0
  207. bigquery_data_science/_skills/bigquery-ml/syntax/mlconvert_color_space.md +53 -0
  208. bigquery_data_science/_skills/bigquery-ml/syntax/mlconvert_image_type.md +39 -0
  209. bigquery_data_science/_skills/bigquery-ml/syntax/mlcorrelation.md +78 -0
  210. bigquery_data_science/_skills/bigquery-ml/syntax/mldecode_image.md +44 -0
  211. bigquery_data_science/_skills/bigquery-ml/syntax/mldescribe_data.md +74 -0
  212. bigquery_data_science/_skills/bigquery-ml/syntax/mldetect_anomalies.md +86 -0
  213. bigquery_data_science/_skills/bigquery-ml/syntax/mldistance.md +48 -0
  214. bigquery_data_science/_skills/bigquery-ml/syntax/mlentity_features_at_time.md +56 -0
  215. bigquery_data_science/_skills/bigquery-ml/syntax/mlevaluate.md +72 -0
  216. bigquery_data_science/_skills/bigquery-ml/syntax/mlexplain_forecast.md +50 -0
  217. bigquery_data_science/_skills/bigquery-ml/syntax/mlexplain_predict.md +66 -0
  218. bigquery_data_science/_skills/bigquery-ml/syntax/mlfeature_cross.md +46 -0
  219. bigquery_data_science/_skills/bigquery-ml/syntax/mlfeature_importance.md +47 -0
  220. bigquery_data_science/_skills/bigquery-ml/syntax/mlfeature_info.md +50 -0
  221. bigquery_data_science/_skills/bigquery-ml/syntax/mlfeatures_at_time.md +51 -0
  222. bigquery_data_science/_skills/bigquery-ml/syntax/mlforecast.md +76 -0
  223. bigquery_data_science/_skills/bigquery-ml/syntax/mlgenerate_embedding-from-a-bqml-pca-autoencoder-matrix_factorization-model.md +64 -0
  224. bigquery_data_science/_skills/bigquery-ml/syntax/mlglobal_explain.md +63 -0
  225. bigquery_data_science/_skills/bigquery-ml/syntax/mlhash_bucketize.md +47 -0
  226. bigquery_data_science/_skills/bigquery-ml/syntax/mlholiday_info.md +46 -0
  227. bigquery_data_science/_skills/bigquery-ml/syntax/mlimputer.md +46 -0
  228. bigquery_data_science/_skills/bigquery-ml/syntax/mllp_norm.md +47 -0
  229. bigquery_data_science/_skills/bigquery-ml/syntax/mlmetrics.md +80 -0
  230. bigquery_data_science/_skills/bigquery-ml/syntax/mlngrams.md +37 -0
  231. bigquery_data_science/_skills/bigquery-ml/syntax/mlone_hot_encoder-mlmulti_hot_encoder-mllabel_encoder.md +67 -0
  232. bigquery_data_science/_skills/bigquery-ml/syntax/mlpolynomial_expand.md +47 -0
  233. bigquery_data_science/_skills/bigquery-ml/syntax/mlpredict.md +67 -0
  234. bigquery_data_science/_skills/bigquery-ml/syntax/mlprincipal_component_info.md +42 -0
  235. bigquery_data_science/_skills/bigquery-ml/syntax/mlprincipal_components.md +40 -0
  236. bigquery_data_science/_skills/bigquery-ml/syntax/mlquantile_bucketize.md +43 -0
  237. bigquery_data_science/_skills/bigquery-ml/syntax/mlrecommend.md +60 -0
  238. bigquery_data_science/_skills/bigquery-ml/syntax/mlreconstruction_loss.md +48 -0
  239. bigquery_data_science/_skills/bigquery-ml/syntax/mlresize_image.md +45 -0
  240. bigquery_data_science/_skills/bigquery-ml/syntax/mlroc_curve.md +63 -0
  241. bigquery_data_science/_skills/bigquery-ml/syntax/mltf_idf.md +37 -0
  242. bigquery_data_science/_skills/bigquery-ml/syntax/mltfdv_describe.md +34 -0
  243. bigquery_data_science/_skills/bigquery-ml/syntax/mltfdv_validate.md +48 -0
  244. bigquery_data_science/_skills/bigquery-ml/syntax/mltraining_info.md +78 -0
  245. bigquery_data_science/_skills/bigquery-ml/syntax/mltransform-applying-a-saved-transform.md +52 -0
  246. bigquery_data_science/_skills/bigquery-ml/syntax/mltranspose-not-a-function-pointer.md +32 -0
  247. bigquery_data_science/_skills/bigquery-ml/syntax/mltrial_info.md +60 -0
  248. bigquery_data_science/_skills/bigquery-ml/syntax/mlvalidate_data_drift.md +99 -0
  249. bigquery_data_science/_skills/bigquery-ml/syntax/mlvalidate_data_skew.md +50 -0
  250. bigquery_data_science/_skills/bigquery-ml/syntax/mlweights.md +84 -0
  251. bigquery_data_science/_skills/bigquery-ml/syntax/model-free-time-series-decomposition-mltrend-mlseasonality-mldetect_change_points.md +100 -0
  252. bigquery_data_science/_skills/bigquery-ml/syntax/model-introspection-mlfeature_info-mltraining_info-mltrial_info.md +7 -0
  253. bigquery_data_science/_skills/bigquery-ml/syntax/model-monitoring-data-validation.md +23 -0
  254. bigquery_data_science/_skills/bigquery-ml/syntax/numerical-scalers-mlstandard_scaler-mlmin_max_scaler-mlmax_abs_scaler-mlrobust_scaler-mlnormalizer.md +77 -0
  255. bigquery_data_science/_skills/bigquery-ml/syntax/onnx.md +55 -0
  256. bigquery_data_science/_skills/bigquery-ml/syntax/pca.md +91 -0
  257. bigquery_data_science/_skills/bigquery-ml/syntax/point-in-time-feature-retrieval-mlfeatures_at_time-mlentity_features_at_time.md +25 -0
  258. bigquery_data_science/_skills/bigquery-ml/syntax/quick-comparison.md +14 -0
  259. bigquery_data_science/_skills/bigquery-ml/syntax/random_forest_classifier-random_forest_regressor.md +123 -0
  260. bigquery_data_science/_skills/bigquery-ml/syntax/remote-remote-model-over-a-vertex-ai-endpoint-the-mechanism.md +87 -0
  261. bigquery_data_science/_skills/bigquery-ml/syntax/tensorflow.md +48 -0
  262. bigquery_data_science/_skills/bigquery-ml/syntax/tensorflow_lite.md +29 -0
  263. bigquery_data_science/_skills/bigquery-ml/syntax/text-preprocessing-functions-mlngrams-mltf_idf-mlbag_of_words.md +18 -0
  264. bigquery_data_science/_skills/bigquery-ml/syntax/timesfm-built-in-foundation-forecaster-see-bigquery-ai.md +28 -0
  265. bigquery_data_science/_skills/bigquery-ml/syntax/transform_only.md +91 -0
  266. bigquery_data_science/_skills/bigquery-ml/syntax/xgboost.md +72 -0
  267. bigquery_data_science/_skills/pinned-models.json +28 -0
  268. bigquery_data_science/catalog.py +1107 -0
  269. bigquery_data_science/cli.py +786 -0
  270. bigquery_data_science/installer.py +282 -0
  271. bigquery_data_science/mcp_server.py +317 -0
  272. bigquery_data_science/tooling/__init__.py +15 -0
  273. bigquery_data_science/tooling/convert_notebook.py +176 -0
  274. bigquery_data_science/tooling/link_policy.py +247 -0
  275. bigquery_data_science/tooling/manifest.py +152 -0
  276. bigquery_data_science/tooling/markdown_anchors.py +84 -0
  277. bigquery_data_science/tooling/narrative_drift.py +163 -0
  278. bigquery_data_science/tooling/pinned_models.py +216 -0
  279. bigquery_data_science/tooling/reference_structure.py +85 -0
  280. bigquery_data_science/tooling/sync_syntax.py +407 -0
  281. bigquery_data_science/tooling/validate.py +208 -0
  282. bigquery_data_science-0.7.0.dist-info/METADATA +306 -0
  283. bigquery_data_science-0.7.0.dist-info/RECORD +286 -0
  284. bigquery_data_science-0.7.0.dist-info/WHEEL +4 -0
  285. bigquery_data_science-0.7.0.dist-info/entry_points.txt +5 -0
  286. bigquery_data_science-0.7.0.dist-info/licenses/LICENSE +201 -0
@@ -0,0 +1,278 @@
1
+ > **Source (`statmike/bigquery-data-science`):** **Notebook:** [`bigquery-ml/workflows/ensembling/ensembling.ipynb`](https://github.com/statmike/bigquery-data-science/blob/main/bigquery-ml/workflows/ensembling/ensembling.ipynb) · **SQL:** [`bigquery-ml/workflows/ensembling/ensembling.sql`](https://github.com/statmike/bigquery-data-science/blob/main/bigquery-ml/workflows/ensembling/ensembling.sql)
2
+
3
+ # Ensembling — BigQuery ML
4
+
5
+ A **stacked ensemble** combining 3 heterogeneous model types — linear, boosting, bagging — each trained with the identical recipe already validated in this project's own model notebooks. Self-contained: retrains its own small copies rather than depending on those notebooks' models still existing.
6
+
7
+ **Models used:** `LOGISTIC_REG`, `BOOSTED_TREE_CLASSIFIER`, `RANDOM_FOREST_CLASSIFIER`
8
+ **Functions used:** `ML.PREDICT`, `ML.EVALUATE`
9
+
10
+ `LOGISTIC_REG`/`BOOSTED_TREE_CLASSIFIER`/`RANDOM_FOREST_CLASSIFIER`'s own mechanics are already covered in depth in `models/logistic_regression` (`models/logistic_regression/`), `models/boosted_tree_classifier` (`models/boosted_tree_classifier/`), and `models/random_forest_classifier` (`models/random_forest_classifier/`) and not repeated here — **this workflow's real content is the stacking methodology and an honest comparison against simpler alternatives.**
11
+
12
+ **Scope note:** `DNN_CLASSIFIER`/`WIDE_AND_DEEP_CLASSIFIER` could be added as a 4th/5th base model via the identical pattern below (both already trained on this exact dataset in `models/dnn_classifier/`/`models/wide_and_deep_classifier/`) — omitted here since both take 12-46 minutes to train in this project, which would make every rebuild of this notebook impractically slow.
13
+
14
+ **Data:** [`bigquery-public-data.ml_datasets.census_adult_income`](https://console.cloud.google.com/marketplace/product/bigquery-public-datasets) — the same feature set/label already used in `models/logistic_regression/`, `models/boosted_tree_classifier/`, `models/random_forest_classifier/`.
15
+
16
+ **References:** `RESOURCES.md` (Full reference) | [CREATE MODEL docs](https://cloud.google.com/bigquery/docs/reference/standard-sql/bigqueryml-syntax-create) | `setup` (Setup guide)
17
+
18
+ ---
19
+ ## Setup
20
+
21
+ Set your project and location, authenticate, and create a shared dataset. No connection needed.
22
+
23
+ ```python
24
+ PROJECT_ID = 'statmike-mlops-349915' # <-- Replace with your project ID
25
+ LOCATION = 'US' # BigQuery dataset location
26
+ DATASET_ID = 'bq_ml' # Shared dataset across all bigquery-ml notebooks
27
+ ```
28
+
29
+ ### Environment
30
+
31
+ > **Already set up the project environment?** The cell below is a no-op — packages are already in your kernel. See the `setup` (Setup Reference) for details.
32
+ >
33
+ > **Running standalone** (Colab, Colab Enterprise, Vertex AI Workbench)? The cell below installs required packages into your current kernel.
34
+
35
+ ```python
36
+ from google.cloud import bigquery
37
+ import pandas as pd
38
+
39
+ client = bigquery.Client(project=PROJECT_ID)
40
+ pd.set_option('display.max_colwidth', None)
41
+
42
+ # Create the shared dataset (idempotent)
43
+ dataset_ref = bigquery.DatasetReference(PROJECT_ID, DATASET_ID)
44
+ dataset = bigquery.Dataset(dataset_ref)
45
+ dataset.location = LOCATION
46
+ client.create_dataset(dataset, exists_ok=True)
47
+ print(f'Dataset {PROJECT_ID}.{DATASET_ID} ready')
48
+
49
+ # Register %%bigquery cell magic (auto-loaded in Colab, needed elsewhere)
50
+ %load_ext bigquery_magics
51
+ ```
52
+
53
+ ---
54
+ ## Step 0 — A 3-way TRAIN/VALIDATE/TEST split, plus a stable row ID
55
+
56
+ **Why 3-way, not the usual 2-way split:** if the meta-model trained on base models' predictions for rows those *same* base models were fit on, its apparent lift would partly be an illusion of overfitting, not real generalization — a classic stacking-leakage mistake. Base models train on `TRAIN` only; their predictions on `VALIDATE` (data they've never seen) become the meta-model's training features; `TEST` stays untouched by everything until the final comparison.
57
+
58
+ `census_adult_income` has no natural row-id column, and — verified live — joining predictions back together on raw feature columns causes fan-out duplicates (different people can share identical feature values across every column). A synthetic `ROW_NUMBER()` `row_id`, generated once here, fixes this for every join below.
59
+
60
+ ```python
61
+ query = """
62
+ CREATE OR REPLACE TABLE `{project}.{dataset}.ensembling_split` AS
63
+ SELECT
64
+ ROW_NUMBER() OVER() AS row_id,
65
+ *,
66
+ CASE
67
+ WHEN MOD(ABS(FARM_FINGERPRINT(TO_JSON_STRING(t))), 10) < 6 THEN 'TRAIN'
68
+ WHEN MOD(ABS(FARM_FINGERPRINT(TO_JSON_STRING(t))), 10) < 8 THEN 'VALIDATE'
69
+ ELSE 'TEST'
70
+ END AS split
71
+ FROM `bigquery-public-data.ml_datasets.census_adult_income` t
72
+ """.format(project=PROJECT_ID, dataset=DATASET_ID)
73
+ client.query(query).result()
74
+
75
+ query = f"""
76
+ SELECT split, COUNT(*) AS n,
77
+ ROUND(SUM(CASE WHEN income_bracket = ' >50K' THEN 1 ELSE 0 END) / COUNT(*), 3) AS positive_rate
78
+ FROM `{PROJECT_ID}.{DATASET_ID}.ensembling_split`
79
+ GROUP BY split
80
+ """
81
+ client.query(query).to_dataframe()
82
+ ```
83
+
84
+ ---
85
+ ## Step 1 — Train 3 base models on `TRAIN` only
86
+
87
+ Identical recipes to `models/logistic_regression/`, `models/boosted_tree_classifier/`, `models/random_forest_classifier/` — just pointed at the `TRAIN` split instead of `AUTO_SPLIT`. Submitted concurrently — BigQuery runs distinctly-named `CREATE MODEL` jobs from one client in true parallel (same pattern as `workflows/cross_validation` (`workflows/cross_validation/`)), so this finishes in roughly the time of the slowest model (typically `RANDOM_FOREST_CLASSIFIER` or `BOOSTED_TREE_CLASSIFIER`, a few minutes), not the sum of all three.
88
+
89
+ ```python
90
+ base_model_configs = {
91
+ 'ensembling_logistic': "model_type = 'LOGISTIC_REG'",
92
+ 'ensembling_boosted': "model_type = 'BOOSTED_TREE_CLASSIFIER'",
93
+ 'ensembling_rf': "model_type = 'RANDOM_FOREST_CLASSIFIER', num_parallel_tree = 50, tree_method = 'HIST'",
94
+ }
95
+
96
+ def train_base_model(model_name, options_prefix):
97
+ query = f"""
98
+ CREATE OR REPLACE MODEL `{PROJECT_ID}.{DATASET_ID}.{model_name}`
99
+ OPTIONS(
100
+ {options_prefix},
101
+ input_label_cols = ['income_bracket'],
102
+ auto_class_weights = TRUE,
103
+ data_split_method = 'NO_SPLIT'
104
+ ) AS
105
+ SELECT age, workclass, education, education_num, marital_status, occupation,
106
+ relationship, race, sex, hours_per_week, native_country, income_bracket
107
+ FROM `{PROJECT_ID}.{DATASET_ID}.ensembling_split`
108
+ WHERE split = 'TRAIN'
109
+ """
110
+ return client.query(query) # submitted asynchronously — caller awaits .result()
111
+
112
+ jobs = {name: train_base_model(name, opts) for name, opts in base_model_configs.items()}
113
+ for name, job in jobs.items():
114
+ job.result()
115
+ print(f'Trained {len(jobs)} base models')
116
+ ```
117
+
118
+ ---
119
+ ## Step 2 — Meta-features: predict each base model on `VALIDATE`, join on `row_id`
120
+
121
+ Each base model's predicted probability of `income_bracket = ' >50K'` becomes one meta-feature column.
122
+
123
+ ```python
124
+ def meta_features_query(split_name, dest_table):
125
+ return f"""
126
+ CREATE OR REPLACE TABLE `{PROJECT_ID}.{DATASET_ID}.{dest_table}` AS
127
+ WITH
128
+ logistic_pred AS (
129
+ SELECT row_id, income_bracket,
130
+ (SELECT prob FROM UNNEST(predicted_income_bracket_probs) WHERE label = ' >50K') AS pred_logistic
131
+ FROM ML.PREDICT(MODEL `{PROJECT_ID}.{DATASET_ID}.ensembling_logistic`,
132
+ (SELECT * FROM `{PROJECT_ID}.{DATASET_ID}.ensembling_split` WHERE split = '{split_name}'))
133
+ ),
134
+ boosted_pred AS (
135
+ SELECT row_id,
136
+ (SELECT prob FROM UNNEST(predicted_income_bracket_probs) WHERE label = ' >50K') AS pred_boosted
137
+ FROM ML.PREDICT(MODEL `{PROJECT_ID}.{DATASET_ID}.ensembling_boosted`,
138
+ (SELECT * FROM `{PROJECT_ID}.{DATASET_ID}.ensembling_split` WHERE split = '{split_name}'))
139
+ ),
140
+ rf_pred AS (
141
+ SELECT row_id,
142
+ (SELECT prob FROM UNNEST(predicted_income_bracket_probs) WHERE label = ' >50K') AS pred_rf
143
+ FROM ML.PREDICT(MODEL `{PROJECT_ID}.{DATASET_ID}.ensembling_rf`,
144
+ (SELECT * FROM `{PROJECT_ID}.{DATASET_ID}.ensembling_split` WHERE split = '{split_name}'))
145
+ )
146
+ SELECT l.row_id, l.income_bracket, l.pred_logistic, b.pred_boosted, r.pred_rf
147
+ FROM logistic_pred l
148
+ JOIN boosted_pred b USING (row_id)
149
+ JOIN rf_pred r USING (row_id)
150
+ """
151
+
152
+ client.query(meta_features_query('VALIDATE', 'ensembling_meta_features')).result()
153
+
154
+ query = f"SELECT COUNT(*) AS n FROM `{PROJECT_ID}.{DATASET_ID}.ensembling_meta_features`"
155
+ client.query(query).to_dataframe()
156
+ ```
157
+
158
+ ---
159
+ ## Step 3 — Train the stacked meta-model on `VALIDATE`'s meta-features
160
+
161
+ A `LOGISTIC_REG` trained on the 3 base models' predicted probabilities as its only features.
162
+
163
+ ```python
164
+ query = f"""
165
+ CREATE OR REPLACE MODEL `{PROJECT_ID}.{DATASET_ID}.ensembling_stacker`
166
+ OPTIONS(
167
+ model_type = 'LOGISTIC_REG',
168
+ input_label_cols = ['income_bracket'],
169
+ auto_class_weights = TRUE,
170
+ data_split_method = 'NO_SPLIT'
171
+ ) AS
172
+ SELECT pred_logistic, pred_boosted, pred_rf, income_bracket
173
+ FROM `{PROJECT_ID}.{DATASET_ID}.ensembling_meta_features`
174
+ """
175
+ client.query(query).result()
176
+ print('Model ensembling_stacker created')
177
+ ```
178
+
179
+ ---
180
+ ## Step 4 — Final honest comparison on `TEST`: base models vs. simple average vs. stacker
181
+
182
+ Build `TEST`-split meta-features the same way, then compare five candidates: each of the 3 base models directly (`ML.EVALUATE`), a **simple average ensemble** (no training — just the mean predicted probability across the 3 base models, thresholded at 0.5), and the **stacked meta-model** (`ML.EVALUATE`).
183
+
184
+ > **Reminder from `models/random_forest_classifier/`: `RANDOM_FOREST_CLASSIFIER` retraining is genuinely non-deterministic.** Since `ensembling_rf`'s predictions feed both the simple-average ensemble and the stacker's training features, every number below that touches `pred_rf` — the `random_forest` row itself, the simple average, and the stacker — will shift slightly run to run. `logistic`/`boosted_tree` and the stacker's own `LOGISTIC_REG` fit are otherwise deterministic, but their downstream comparison numbers inherit RF's variance through the ensemble. Treat the specific values below as illustrative of one run, not fixed constants.
185
+
186
+ ```python
187
+ client.query(meta_features_query('TEST', 'ensembling_meta_features_test')).result()
188
+
189
+ query = f"SELECT COUNT(*) AS n FROM `{PROJECT_ID}.{DATASET_ID}.ensembling_meta_features_test`"
190
+ client.query(query).to_dataframe()
191
+ ```
192
+
193
+ ```python
194
+ query = f"""
195
+ SELECT 'logistic' AS model, * FROM ML.EVALUATE(MODEL `{PROJECT_ID}.{DATASET_ID}.ensembling_logistic`,
196
+ (SELECT * FROM `{PROJECT_ID}.{DATASET_ID}.ensembling_split` WHERE split = 'TEST'))
197
+ UNION ALL
198
+ SELECT 'boosted_tree' AS model, * FROM ML.EVALUATE(MODEL `{PROJECT_ID}.{DATASET_ID}.ensembling_boosted`,
199
+ (SELECT * FROM `{PROJECT_ID}.{DATASET_ID}.ensembling_split` WHERE split = 'TEST'))
200
+ UNION ALL
201
+ SELECT 'random_forest' AS model, * FROM ML.EVALUATE(MODEL `{PROJECT_ID}.{DATASET_ID}.ensembling_rf`,
202
+ (SELECT * FROM `{PROJECT_ID}.{DATASET_ID}.ensembling_split` WHERE split = 'TEST'))
203
+ """
204
+ base_results = client.query(query).to_dataframe()
205
+ base_results
206
+ ```
207
+
208
+ ```python
209
+ query = f"""
210
+ WITH scored AS (
211
+ SELECT income_bracket, (pred_logistic + pred_boosted + pred_rf) / 3 AS pred_avg
212
+ FROM `{PROJECT_ID}.{DATASET_ID}.ensembling_meta_features_test`
213
+ ),
214
+ labeled AS (
215
+ SELECT income_bracket = ' >50K' AS actual_positive, pred_avg >= 0.5 AS predicted_positive
216
+ FROM scored
217
+ ),
218
+ counts AS (
219
+ SELECT
220
+ COUNTIF(actual_positive AND predicted_positive) AS tp,
221
+ COUNTIF(NOT actual_positive AND predicted_positive) AS fp,
222
+ COUNTIF(actual_positive AND NOT predicted_positive) AS fn,
223
+ COUNTIF(NOT actual_positive AND NOT predicted_positive) AS tn
224
+ FROM labeled
225
+ )
226
+ SELECT
227
+ 'simple_average' AS model,
228
+ tp / (tp + fp) AS precision,
229
+ tp / (tp + fn) AS recall,
230
+ (tp + tn) / (tp + fp + fn + tn) AS accuracy,
231
+ 2 * (tp / (tp + fp)) * (tp / (tp + fn)) / ((tp / (tp + fp)) + (tp / (tp + fn))) AS f1_score
232
+ FROM counts
233
+ """
234
+ simple_ensemble_result = client.query(query).to_dataframe()
235
+ simple_ensemble_result
236
+ ```
237
+
238
+ ```python
239
+ query = f"""
240
+ SELECT 'stacked_meta_model' AS model, * FROM ML.EVALUATE(MODEL `{PROJECT_ID}.{DATASET_ID}.ensembling_stacker`,
241
+ (SELECT pred_logistic, pred_boosted, pred_rf, income_bracket
242
+ FROM `{PROJECT_ID}.{DATASET_ID}.ensembling_meta_features_test`))
243
+ """
244
+ stacker_result = client.query(query).to_dataframe()
245
+ stacker_result
246
+ ```
247
+
248
+ **Honest finding, in two parts because the two ensembling techniques don't agree on which metric they win:**
249
+ - **Among the 4 candidates `ML.EVALUATE` can score (the 3 base models + the stacker — `roc_auc` isn't computed for the hand-thresholded simple-average ensemble), the stacked meta-model wins on `roc_auc`** (≈0.896 vs. the best individual base model, `boosted_tree`, at ≈0.893) — a genuine, if modest, ranking-quality improvement from combining all three models' signal.
250
+ - **On F1 (a fixed-threshold metric, computed for all 5 candidates), the simple average ensemble edges out the stacker** (≈0.666 vs. ≈0.665) — the free, no-training approach is *slightly* better here, not worse.
251
+
252
+ Neither result is dramatic, and that's the honest takeaway: ensembling helped a little, in a metric-dependent way — unlike the legacy notebook this workflow modernizes (whose stacked ensemble did *not* clearly beat its best individual model at all), and unlike several other workflows in this project (`workflows/recommendation` (`recommendation`), `workflows/embeddings_classification` (`embeddings_classification`)) where a simpler baseline won outright and unambiguously. Worth reporting exactly as measured rather than forcing either narrative — "ensembling helps, sometimes, a little, depending what you're optimizing for" is a more honest lesson than either "ensembling always wins" or "ensembling is pointless." (Exact figures above are from one run — see the `RANDOM_FOREST_CLASSIFIER` non-determinism note before Step 4's first cell.)
253
+
254
+ ---
255
+ ## Related content
256
+
257
+ - `models/logistic_regression` (`models/logistic_regression/`), `models/boosted_tree_classifier` (`models/boosted_tree_classifier/`), `models/random_forest_classifier` (`models/random_forest_classifier/`) — each base model type's mechanics in depth.
258
+ - `workflows/cross_validation` (`workflows/cross_validation/`) — a complementary model-validation technique; both address different aspects of trusting a single number from `ML.EVALUATE`.
259
+ - `workflows/feature_store` (`workflows/feature_store/`) — the *other* leakage this notebook's 3-way split is guarding against, measured rather than avoided. Stacking leakage is about which rows a model saw; **label leakage** is about which point in time its features came from. That workflow builds one feature history two ways and shows the leaky construction reporting `roc_auc` 0.9387 against the correct 0.5194 — then collapsing to 0.5299 when scored on the features production can actually supply.
260
+ - `functions/feature_store` (`functions/feature_store/`) — `ML.FEATURES_AT_TIME` / `ML.ENTITY_FEATURES_AT_TIME`, the retrieval functions that make a point-in-time-correct training set a query rather than a project.
261
+
262
+ ---
263
+ ## Examples — `%%bigquery` Magics
264
+
265
+ The same operations using IPython magic commands — write SQL directly in cells without Python string wrapping.
266
+
267
+ ```sql
268
+ %%bigquery --project {PROJECT_ID}
269
+
270
+ SELECT split, COUNT(*) AS n
271
+ FROM `statmike-mlops-349915.bq_ml.ensembling_split`
272
+ GROUP BY split
273
+ ```
274
+
275
+ ---
276
+ ## Examples — BigFrames
277
+
278
+ No direct BigFrames equivalent for stacking multiple heterogeneous model types into a meta-model — this is hand-rolled SQL/`ML.PREDICT` composition here. `bigframes.ml.linear_model.LogisticRegression`/`ensemble.XGBClassifier`/`ensemble.RandomForestClassifier` are already demonstrated individually in their respective `models/` notebooks.