Todos os produtos
Search
Central de documentação

MaxCompute:Treine e faça previsões com um modelo XGBoost usando o MaxCompute

Última atualização: Jun 27, 2026

Este documento demonstra como treinar um modelo de regressão XGBoost (eXtreme Gradient Boosting) com a API Python do MaxFrame e executar inferências em dois engines — Python e SQL — utilizando o mesmo objeto de modelo salvo.

Este fluxo de trabalho utiliza o engine atualizado do MaxFrame, que está atualmente em visualização por convite. O código de exemplo serve apenas como referência. Para testar esse recurso, envie um ticket.

Como funciona

Este documento aborda dois fluxos de trabalho complementares:

Fluxo de trabalho

Engine

Público-alvo

Treinamento e previsão com MaxFrame

Python (API MaxFrame)

Engenheiros de algoritmos que programam em Python

Previsão com SQL

SQL (função ML_PREDICT)

Equipes de análise que escrevem consultas SQL

Ambos os fluxos utilizam o mesmo objeto de modelo do MaxCompute. Os resultados são idênticos independentemente do engine escolhido. Isso elimina a sobrecarga de integração em ambientes com múltiplas equipes, onde engenheiros de algoritmos preferem Python e as equipes de análise optam por SQL.

Conceitos principais

O XGBoost é um algoritmo de aprendizado de conjunto baseado em uma estrutura de gradient boosting. Ele constrói árvores de decisão iterativamente, usa derivadas de segunda ordem para otimizar a função objetivo e combina suas saídas em um modelo aditivo — capturando com eficiência relações complexas e não lineares em dados estruturados.

Conjunto de dados

Este documento utiliza o conjunto de dados Boston Housing, que descreve as condições habitacionais na região de Boston durante a década de 1970.

  • Dados de treinamento: 500 amostras, 12 colunas de recursos, 1 coluna alvo (MEDV)

  • Dados de previsão: 6 amostras, mesmas 12 colunas de recursos

Campo

Tipo

Descrição

1

CRIM

Float

Taxa de criminalidade per capita por cidade

2

ZN

Float

Proporção de terrenos residenciais zoneados para lotes >25.000 pés quadrados

3

INDUS

Float

Proporção de acres comerciais não varejistas por cidade

4

CHAS

Integer

Margem do rio (1=sim, 0=não)

5

NOX

Float

Concentração de óxidos nítricos (ppm)

6

RM

Float

Número médio de cômodos por residência

7

AGE

Float

Proporção de unidades ocupadas pelo proprietário construídas antes de 1940

8

DIS

Float

Distâncias ponderadas até cinco centros de emprego de Boston

9

RAD

Integer

Índice de acessibilidade a rodovias radiais

10

TAX

Float

Taxa de imposto predial sobre valor total por USD 10.000

11

PTRATIO

Float

Razão aluno-professor por cidade

12

LSTAT

Float

Percentual da população de status socioeconômico mais baixo

13

MEDV

Float

Valor mediano das casas ocupadas pelo proprietário em milhares de USD (variável alvo)

Pré-requisitos

Antes de começar, verifique se você possui:

Prepare os dados

  1. Crie as tabelas de treinamento, entrada de previsão e resultado da previsão.

    -- Training data table
    CREATE TABLE IF NOT EXISTS demo_xgboost_train
    (
     CRIM         FLOAT comment 'Per capita crime rate by town',
     ZN           FLOAT comment 'Proportion of residential land zoned for lots >25,000 sq. ft.',
     INDUS        FLOAT comment 'Proportion of non-retail business acres per town',
     CHAS         INT   comment 'Bounds river (1=yes, 0=no)',
     NOX          FLOAT comment 'Nitric oxides concentration (ppm)',
     RM           FLOAT comment 'Average number of rooms per dwelling',
     AGE          FLOAT comment 'Proportion of owner-occupied units built before 1940',
     DIS          FLOAT comment 'Weighted distances to five Boston employment centers',
     RAD          FLOAT comment 'Index of accessibility to radial highways',
     TAX          FLOAT comment 'Full-value property-tax rate per USD 10,000',
     PTRATIO      FLOAT comment 'Pupil-teacher ratio by town',
     LSTAT        FLOAT comment 'Percentage of lower status of the population',
     MEDV         FLOAT comment 'Median value of owner-occupied homes in thousands of USD'
    );
    
    -- Prediction input table (no MEDV column)
    CREATE TABLE IF NOT EXISTS demo_xgboost_predict
    (
     CRIM         FLOAT comment 'Per capita crime rate by town',
     ZN           FLOAT comment 'Proportion of residential land zoned for lots >25,000 sq. ft.',
     INDUS        FLOAT comment 'Proportion of non-retail business acres per town',
     CHAS         INT   comment 'Bounds river (1=yes, 0=no)',
     NOX          FLOAT comment 'Nitric oxides concentration (ppm)',
     RM           FLOAT comment 'Average number of rooms per dwelling',
     AGE          FLOAT comment 'Proportion of owner-occupied units built before 1940',
     DIS          FLOAT comment 'Weighted distances to five Boston employment centers',
     RAD          FLOAT comment 'Index of accessibility to radial highways',
     TAX          FLOAT comment 'Full-value property-tax rate per USD 10,000',
     PTRATIO      FLOAT comment 'Pupil-teacher ratio by town',
     LSTAT        FLOAT comment 'Percentage of lower status of the population'
    );
    
    -- MaxFrame prediction result table (uses DOUBLE types and adds a RESULT column)
    CREATE TABLE IF NOT EXISTS demo_xgboost_predict_result
    (
     CRIM         DOUBLE comment 'Per capita crime rate by town',
     ZN           DOUBLE comment 'Proportion of residential land zoned for lots >25,000 sq. ft.',
     INDUS        DOUBLE comment 'Proportion of non-retail business acres per town',
     CHAS         BIGINT comment 'Bounds river (1=yes, 0=no)',
     NOX          DOUBLE comment 'Nitric oxides concentration (ppm)',
     RM           DOUBLE comment 'Average number of rooms per dwelling',
     AGE          DOUBLE comment 'Proportion of owner-occupied units built before 1940',
     DIS          DOUBLE comment 'Weighted distances to five Boston employment centers',
     RAD          DOUBLE comment 'Index of accessibility to radial highways',
     TAX          DOUBLE comment 'Full-value property-tax rate per USD 10,000',
     PTRATIO      DOUBLE comment 'Pupil-teacher ratio by town',
     LSTAT        DOUBLE comment 'Percentage of lower status of the population',
     RESULT       DOUBLE comment 'Predicted value of owner-occupied homes'
    );
  2. Baixe os arquivos CSV de exemplo e faça o upload deles para o MaxCompute usando a API Tunnel.

    Download:

    Upload:

    TUNNEL UPLOAD xgboost_train_data.csv demo_xgboost_train;
    TUNNEL UPLOAD xgboost_predict.csv demo_xgboost_predict;

Treine e salve o modelo

Execute o script Python a seguir para inicializar uma sessão do MaxFrame, treinar um XGBRegressor com os dados de treinamento do Boston Housing e salvar o modelo como um objeto de modelo versionado no MaxCompute.

# --- Session initialization ---
from odps import ODPS
import maxframe
from maxframe.config import options

o = ODPS(
    '<your-access-key-id>',
    '<your-access-key-secret>',
    '<your-project-name>',
    '<your-endpoint>',
)

# --- Engine configuration ---
options.sql.enable_mcqa = False
# Use the DPE engine first, fall back to MCSQL, then SPE.
options.dag.settings = {
    "engine_order": ["DPE", "MCSQL", "SPE"]
}
options.dpe.settings = {
    "odps.catalog_api_endpoint": "<catalog-api-endpoint>",
}
options.sql.settings = {
    "odps.session.image": "common",
}
options.service_role_arn = "acs:ram::13933481********:role/aliyunodpsdefaultrole"
options.object_cache_url = "oss://oss-cn-beijing-internal.aliyuncs.com/models-*******/mfdemo"

sess = maxframe.new_session(o)
print(sess.get_logview_address())

# --- Model training ---
import numpy as np
import maxframe.dataframe as md
from maxframe.learn.contrib.xgboost import XGBRegressor

table_name = "demo_xgboost_train"
features = ['crim', 'zn', 'indus', 'chas', 'nox', 'rm', 'age', 'dis', 'rad', 'tax', 'ptratio', 'lstat']
label = 'medv'

# Read training data from MaxCompute.
df = md.read_odps_table(table_name, unknown_as_string=True)

# Separate features and label; fill missing values with -1.
X_train = df[features].fillna(-1)
y_train = df[label]

# Train the XGBoost regression model.
model = XGBRegressor(
    n_estimators=300,
    learning_rate=0.1,
    colsample_bytree=0.8,
    n_jobs=-1,
    tree_method="hist",
    enable_categorical=True,
    objective='reg:squarederror'
)

# Save the trained model as a versioned MaxCompute model object.
model.fit(X_train, y_train).to_odps_model(
    model_name="demo_model_xgboost_regressor",
    model_version="v01",
).execute()

Substitua os placeholders pelos seus valores reais:

Placeholder

Descrição

Exemplo

<your-access-key-id>

AccessKey ID da Alibaba Cloud

LTAI5tXxx

<your-access-key-secret>

AccessKey secret da Alibaba Cloud

xXxXxXx

<your-project-name>

Nome do projeto no MaxCompute

my_project

<your-endpoint>

Endpoint do MaxCompute

http://service.cn-hangzhou.maxcompute.aliyun.com/api

<catalog-api-endpoint>

Endpoint da Catalog API para o engine DPE

Fornecido ao ativar o recurso

Verifique o modelo salvo

Execute DESC model para confirmar se o modelo foi salvo corretamente.

DESC model demo_model_xgboost_regressor;

Saída esperada:

+------------------------------------------------------------------------------------+
|                  Model Information                                                 |
+------------------------------------------------------------------------------------+
| Owner:                    ALIYUN$***********************                           |
| Project:                  pd_test_model                                            |
| Schema:                   default                                                  |
| Model Name:               demo_model_xgboost_regressor                            |
| Model Type:               BOOSTED_TREE_REGRESSOR                                  |
| Source Type:              INTERNAL_TRAIN                                           |
| Default Version:          v01                                                      |
| CreateTime:               2025-09-12 13:15:16                                      |
| LastModifiedTime:         2025-09-12 13:15:16                                      |
| Model ID:                 389c90e355264079923b89**********                         |
+------------------------------------------------------------------------------------+
|                Version Information                                                 |
+------------------------------------------------------------------------------------+
| Owner:                    ALIYUN$***********************                           |
| Project:                  pd_test_model                                            |
| Schema:                   default                                                  |
| Model Name:               demo_model_xgboost_regressor                            |
| Model Type:               BOOSTED_TREE_REGRESSOR                                  |
| Source Type:              INTERNAL_TRAIN                                           |
| Version Name:             v01                                                      |
| Version ID:               99acd6cb93f845c8a4a9977*********                        |
| Path:                                                                              |
| CreateTime:               2025-09-12 13:15:16                                      |
| LastModifiedTime:         2025-09-12 13:15:16                                      |
+------------------------------------------------------------------------------------+
| Input           | Type       | Comment                                             |
+------------------------------------------------------------------------------------+
| crim            | float      |                                                     |
| zn              | float      |                                                     |
| indus           | float      |                                                     |
| chas            | int        |                                                     |
| nox             | float      |                                                     |
| rm              | float      |                                                     |
| age             | float      |                                                     |
| dis             | float      |                                                     |
| rad             | float      |                                                     |
| tax             | float      |                                                     |
| ptratio         | float      |                                                     |
| lstat           | float      |                                                     |
+------------------------------------------------------------------------------------+

Faça previsões com o MaxFrame

Após o treinamento, utilize a mesma sessão do MaxFrame para executar a inferência e gravar os resultados em uma tabela de destino.

# Define the prediction input and output tables.
predict_table = "demo_xgboost_predict_mf"
predict_result_table = "demo_xgboost_predict_result"

# Read prediction data.
predict_data = md.read_odps_table(predict_table, unknown_as_string=True)
X_predict = predict_data[features].fillna(-1)
y_predict = model.predict(X_predict)

# Build the result DataFrame with the predicted column.
df_predict = predict_data[features].copy()
df_predict['predicted_medv'] = y_predict.astype(np.float64)

# Write results to MaxCompute.
df_predict.to_odps_table(
    predict_result_table,
    overwrite=True,
    index=False,
    unknown_as_string=True
).execute()

Consulte a tabela de destino para revisar a saída:

SELECT * FROM demo_xgboost_predict_result LIMIT 10;

Saída esperada:

+------------+------------+------------+------------+------------+------------+------------+------------+------------+------------+------------+------------+------------+
| crim       | zn         | indus      | chas       | nox        | rm         | age        | dis        | rad        | tax        | ptratio    | lstat      | result     |
+------------+------------+------------+------------+------------+------------+------------+------------+------------+------------+------------+------------+------------+
| 0.22438    | 0.0        | 9.69       | 0          | 0.585      | 6.027      | 79.7       | 2.4982     | 6.0        | 391.0      | 19.2       | 14.33      | 20.03961181640625      |
| 0.06263    | 0.0        | 11.93      | 0          | 0.573      | 6.593      | 69.1       | 2.4786     | 1.0        | 273.0      | 21.0       | 9.67       | 24.491479873657227     |
| 0.04527    | 0.0        | 11.93      | 0          | 0.573      | 6.12       | 76.7       | 2.2875     | 1.0        | 273.0      | 21.0       | 9.08       | 24.683202743530273     |
| 0.06076    | 0.0        | 11.93      | 0          | 0.573      | 6.976      | 91.0       | 2.1675     | 1.0        | 273.0      | 21.0       | 5.64       | 32.33962631225586      |
| 0.10959    | 0.0        | 11.93      | 0          | 0.573      | 6.794      | 89.3       | 2.3889     | 1.0        | 273.0      | 21.0       | 6.48       | 28.45917510986328      |
| 0.04741    | 0.0        | 11.93      | 0          | 0.573      | 6.03       | 80.8       | 2.505      | 1.0        | 273.0      | 21.0       | 7.88       | 24.43267822265625      |
+------------+------------+------------+------------+------------+------------+------------+------------+------------+------------+------------+------------+------------+

Faça previsões com SQL

Utilize ML_PREDICT para executar inferências diretamente em SQL, sem necessidade de um ambiente Python. A função recebe o nome do modelo, a versão e as colunas de recursos como argumentos, na mesma ordem dos dados de treinamento.

SET odps.sql.type.system.odps2=true;
SET odps.task.major.version=sqlml_master;
SET odps.sql.machine.learning.enable=true;

SELECT ML_PREDICT(demo_model_xgboost_regressor,v01,crim,zn,indus,chas,nox,rm,age,dis,rad,tax,ptratio,lstat)
FROM demo_xgboost_predict;
Importante

Informe as colunas de recursos na mesma ordem dos dados de treinamento. A função retorna uma única coluna de previsão chamada _c0.

Saída esperada:

+------------+
| _c0        |
+------------+
| 20.039612  |
| 24.49148   |
| 24.683203  |
| 32.339626  |
| 28.459175  |
| 24.432678  |
+------------+

Os resultados da função ML_PREDICT correspondem às previsões do MaxFrame para os mesmos dados de entrada, confirmando que ambos os engines produzem inferências consistentes a partir do mesmo objeto de modelo.