Create AutoML Analysis
Creates a new AutoML analysis within the workspace.
REQUEST URI
https://<ZohoAnalytics_Server_URI>/restapi/v2/automl/workspaces/<workspace-id>/analysis
Post
oauthscope: ZohoAnalytics.modeling.create
QUERY PARAMETERS
Parameter Name | Description |
|---|---|
| CONFIG | JSONObject Config parameter specifications are available in the below section. |
FIELDS FOR CONFIG JSON
| Key | Description |
|---|---|
| name * | String Name of the analysis template. Constraints: Maximum length is 60 characters. |
| description | String Detailed description of the analysis template. Constraints: Maximum length is 1000 characters. |
| trainingTableId * | Long Unique ID of the training table that will be used to build the analysis model. |
| targetColumn | String Name of the target column from the training table that the model will predict. |
| predictionType * | String Type of prediction to be performed by the model. Allowed values: |
| features * | JSONArray List of column names from the training table that will be used as input features for model training. Sample: Structure: Each value should be a valid column name (String). |
| serverOption * | Integer Specifies the server option/environment where the analysis will be executed. Allowed Values: (1 → 8GB, 2 → 16GB, 3 → 32GB). |
| algorithms * | JSONObject Configuration details for machine learning algorithms to be used for training the model. To learn more about Algorithm Structure, click here. |
1. decisiontreeRegression (JSONObject)
Configuration for a Decision Tree regression model.
| Key | Description |
|---|---|
| minimumSampleSplit | Integer The minimum number of data points required to split a node; higher values make the tree simpler and help avoid overfitting. |
| maximumDepth | Integer Maximum depth of the tree. smaller values prevent the model from becoming too complex and overfitting the data. |
2. randomForestRegression (JSONObject)
Configuration for a Random Forest regression model.
| Key | Description |
|---|---|
| minimumSampleSplit | Integer The minimum number of data points needed to split a node in each tree; larger values make the trees more conservative and reduce overfitting. |
| maximumDepth | Integer Maximum depth of the tree; limiting depth keeps the trees simpler and improves generalization. |
| numberOfTrees | Integer The number of decision trees built in the forest; more trees usually improve accuracy but increase training time. |
3. olsRegression (JSONObject)
Configuration for an Ordinary Least Squares regression model.
| Key | Description |
|---|---|
| intercept | Boolean If true, the model learns a constant term (bias) so the regression line doesn’t have to pass through the origin; if false, the line is forced through zero. |
| allowAlternateModel | Boolean If true, the system may switch to a numerically stable alternative when standard OLS fails due to multicollinearity or singular matrices. |
4. lassoRegression (JSONObject)
Configuration for a Lasso regression model.
| Key | Description |
|---|---|
| tolerance | Decimal Sets how small the improvement must be before training stops; smaller values make the model train longer but more precisely. |
| shrinkage | Integer Controls how strongly coefficients are pushed toward zero; higher values increase feature selection but can reduce model flexibility. |
| maximumIterations | Integer The maximum number of training steps allowed; higher values help the model converge when the data is complex. |
5. ridgeRegression (JSONObject)
Configuration for a Ridge regression model.
| Key | Description |
|---|---|
| shrinkage | Integer Controls how strongly coefficients are pushed toward zero; higher values increase feature selection but can reduce model flexibility. |
6. svmRegressor (JSONObject)
Configuration for a Support Vector Machine regression model.
| Key | Description |
|---|---|
| epsilon | Decimal Defines a “no-penalty” zone where small prediction errors are ignored, helping the model focus on larger mistakes. |
| softMargin | Decimal Controls how strictly the model fits the data; higher values force closer fitting, while lower values allow more flexibility to generalize better. |
| tolerance | Decimal Sets how small the change must be before training stops, balancing training time and precision. |
| epochs | Integer The number of times the model goes through the training data; more epochs can improve learning but may increase training time. |
7. gradientBoostingRegression (JSONObject)
Configuration for a Gradient Boosting regression model.
| Key | Description |
|---|---|
| lossFunction | String Defines what kind of error the model tries to minimize. |
| maximumDepth | Integer Depth of tree; smaller depths keep trees simple and reduce overfitting. |
| maximumNodes | Integer Sets the maximum number of leaf nodes in a tree, controlling how complex each tree can become. |
| nodeSize | Integer The minimum number of data points required in a leaf node; larger values make the model smoother and less sensitive to noise. |
| numberOfTrees | Integer The total number of trees added to the model; more trees usually improve accuracy but increase training time. |
| shrinkage | Decimal Controls the learning rate, deciding how much each tree contributes to the final prediction; smaller values learn more slowly but more reliably. |
| subSample | Decimal The fraction of data used to train each tree; smaller values add randomness and help reduce overfitting. |
8. gradientBoostingClassification (JSONObject)
Configuration for a Gradient Boosting classification model.
| Key | Description |
|---|---|
| lossFunction | String Defines what kind of error the model tries to minimize. |
| maximumDepth | Integer Depth of tree; smaller depths keep trees simple and reduce overfitting. |
| maximumNodes | Integer Sets the maximum number of leaf nodes in a tree, controlling how complex each tree can become. |
| nodeSize | Integer The minimum number of data points required in a leaf node; larger values make the model smoother and less sensitive to noise. |
| numberOfTrees | Integer The total number of trees added to the model; more trees usually improve accuracy but increase training time. |
| shrinkage | Decimal Controls the learning rate, deciding how much each tree contributes to the final prediction; smaller values learn more slowly but more reliably. |
| subSample | Decimal The fraction of data used to train each tree; smaller values add randomness and help reduce overfitting. |
9. adaptiveBoost (JSONObject)
Configuration for an Adaptive Boost (AdaBoost) classification model.
| Key | Description |
|---|---|
| maximumDepth | Integer Depth of tree; smaller depths keep trees simple and reduce overfitting. |
| maximumNodes | Integer Sets the maximum number of leaf nodes in a tree, controlling how complex each tree can become. |
| nodeSize | Integer The minimum number of data points required in a leaf node; larger values make the model smoother and less sensitive to noise. |
| numberOfTrees | Integer The total number of trees added to the model; more trees usually improve accuracy but increase training time. |
10. decisiontreeClassification (JSONObject)
Configuration for a Decision Tree classification model.
| Key | Description |
|---|---|
| minimumSampleSplit | Integer The minimum number of data points required to split a node; higher values make the tree simpler and help avoid overfitting. |
| maximumDepth | Integer Maximum depth of the tree. smaller values prevent the model from becoming too complex and overfitting the data. |
11. randomForestClassification (JSONObject)
Configuration for a Random Forest classification model.
| Key | Description |
|---|---|
| minimumSampleSplit | Integer The minimum number of data points needed to split a node in each tree; larger values make the trees more conservative and reduce overfitting. |
| maximumDepth | Integer Maximum depth of the tree; limiting depth keeps the trees simpler and improves generalization. |
| numberOfTrees | Integer The number of decision trees built in the forest; more trees usually improve accuracy but increase training time. |
12. logisticRegression (JSONObject)
Configuration for a Logistic Regression classification model.
| Key | Description |
|---|---|
| lambda | Decimal Controls the strength of regularization, helping prevent overfitting by penalizing very large coefficient values. |
| maximumIterations | Integer The maximum number of training steps the model can take to find the best parameters. |
| tolerance | Decimal Sets how small the improvement must be before training stops, balancing accuracy and training time. |
13. linearDiscriminantAnalysis (JSONObject)
Configuration for a Linear Discriminant Analysis classification model.
| Key | Description |
|---|---|
| tolerance | Decimal Sets how small the improvement must be before training stops, balancing accuracy and training time. |
14. maxEntropy (JSONObject)
Configuration for a Max Entropy (Multinomial Logistic Regression) classification model.
| Key | Description |
|---|---|
| lambda | Decimal Controls the strength of regularization, helping prevent overfitting by penalizing very large coefficient values. |
| maximumIterations | Integer The maximum number of training steps the model can take to find the best parameters. |
| tolerance | Decimal Sets how small the improvement must be before training stops, balancing accuracy and training time. |
15. kMeansPP (JSONObject)
Configuration for a K-Means++ clustering model.
| Key | Description |
|---|---|
| clustersCount | Integer The number of clusters the algorithm will form when a fixed value of k is provided. |
| kMax | Integer The maximum number of clusters to try when the algorithm is allowed to search for an optimal k. |
| chIndexBasedOptimalK | Boolean If enabled, the model automatically selects the best number of clusters using the Calinski–Harabasz index. |
| calculatePerformanceMetrics | Boolean Determines whether clustering quality metrics are computed after training, which helps evaluate how good the clusters are. |
16. kModes (JSONObject)
Configuration for a K-Modes clustering model (for categorical data).
| Key | Description |
|---|---|
| clustersCount | Integer The fixed number of clusters the algorithm will create. |
| minimumClusterCount | Integer The smallest number of clusters to consider when searching for the best clustering. |
| maximumClusterCount | Integer The largest number of clusters to consider when searching for the best clustering. |
| dissimilarityMeasure | String Defines how difference between categorical data points is calculated (for example, simple matching vs. frequency-based methods). |
17. kPrototypes (JSONObject)
Configuration for a K-Prototypes clustering model (for mixed numerical and categorical data).
| Key | Description |
|---|---|
| clustersCount | Integer The number of clusters the algorithm will form when a fixed value of k is provided. |
| kMax | Integer The maximum number of clusters to try when the algorithm is allowed to search for an optimal k. |
| chIndexBasedOptimalK | Boolean If enabled, the model automatically selects the best number of clusters using the Calinski–Harabasz index. |
| gamma | Decimal Controls the balance between numerical and categorical features; higher values give more importance to categorical data when forming clusters. |
18. xMeans (JSONObject)
Configuration for an X-Means clustering model (an extension of K-Means).
| Key | Description |
|---|---|
| kMax | Integer The maximum number of clusters to try when the algorithm is allowed to search for an optimal k. |
| maximumIterations | Integer The maximum number of training steps the model can take to find the best parameters. |
| tolerance | Decimal Sets how small the improvement must be before training stops, balancing accuracy and training time. |
19. gMeans (JSONObject)
Configuration for a G-Means clustering model (which determines k based on a statistical test).
| Key | Description |
|---|---|
| kMax | Integer The maximum number of clusters to try when the algorithm is allowed to search for an optimal k. |
| maximumIterations | Integer The maximum number of training steps the model can take to find the best parameters. |
| tolerance | Decimal Sets how small the improvement must be before training stops, balancing accuracy and training time. |
Sample Request:
Copiedcurl https://analyticsapi.zoho.com/restapi/v2/automl/workspaces/<workspace-id>/analysis --data-urlencode 'CONFIG={"name":"Analysis-1","trainingTableId":"466206000000061002","targetColumn":"Product","predictionType":"Classification","features":["Region","Product Category","Sales"],"serverOption":1,"algorithms":{"decisionTreeClassification":{"minimumSampleSplit":"2","maximumDepth":"6"},"randomForestClassification":{"minimumSampleSplit":"2","maximumDepth":"6","numberOfTrees":"25"}}}'
-X 'POST'
-H 'ZANALYTICS-ORGID: <org-id>'
-H 'Authorization: Zoho-oauthtoken <access_token>'CopiedorgId = "55522777";
workspaceId = "<workspace-id>";
headersMap = Map();
headersMap.put("ZANALYTICS-ORGID", orgId);
config = Map();
config.put("name", "Analysis-1");
config.put("trainingTableId", "466206000000061002");
config.put("targetColumn", "Product");
config.put("predictionType", "Classification");
featuresList = {};
featuresList.add("Region");
featuresList.add("Product Category");
featuresList.add("Sales");
config.put("features", featuresList);
config.put("serverOption", 1);
algorithmsMap = Map();
dtMap = Map();
dtMap.put("minimumSampleSplit", "2");
dtMap.put("maximumDepth", "6");
algorithmsMap.put("decisionTreeClassification", dtMap);
rfMap = Map();
rfMap.put("minimumSampleSplit", "2");
rfMap.put("maximumDepth", "6");
rfMap.put("numberOfTrees", "25");
algorithmsMap.put("randomForestClassification", rfMap);
config.put("algorithms", algorithmsMap);
paramsMap = Map();
paramsMap.put("CONFIG", config.toString());
response = invokeurl
[
url :"https://analyticsapi.zoho.com/restapi/v2/automl/workspaces/" + workspaceId + "/analysis"
type :POST
parameters:paramsMap
headers:headersMap
connection:"analytics_oauth_connection"
];
info response;Copiedusing System;
using System.Collections.Generic;
using ZohoAnalytics;
using System.Text.Json;
namespace ZohoAnalyticsTest
{
class Program
{
long orgId = 55522777;
long workspaceId = 35130000001055707;
public void CreateAutomlAnalysis(IAnalyticsClient ac)
{
string automlName = "Sales Analysis - CSharp SDK";
long trainingTableId = 466206000000061002;
string predictionType = "CLASSIFICATION";
List<string> features = new List<string>
{
"Region",
"Product Category",
"Sales"
};
int serverOption = 1;
Dictionary<string, object> algorithms = new Dictionary<string, object>
{
{
"decisionTreeClassification",
new Dictionary<string, object>
{
{ "minimumSampleSplit", "2" },
{ "maximumDepth", "100" }
}
},
{
"randomForestClassification",
new Dictionary<string, object>
{
{ "minimumSampleSplit", "2" },
{ "maximumDepth", "100" },
{ "numberOfTrees", "25" }
}
}
};
Dictionary<string, object> config = new Dictionary<string, object>
{
{ "description", "Sales Table Analysis..." },
{ "targetColumn", "Product" }
};
IWorkspaceAPI workspace = ac.GetWorkspaceInstance(orgId, workspaceId);
long automlId = workspace.CreateAutomlAnalysis(
automlName,
trainingTableId,
predictionType,
features,
serverOption,
algorithms,
config
);
Console.WriteLine("Created AutoML Analysis ID: " + automlId);
}
static void Main(string[] args)
{
string clientId = "1000.xxxxxxx";
string clientSecret = "xxxxxxx";
string refreshToken = "1000.xxxxxxx.xxxxxxx";
try
{
IAnalyticsClient ac = new AnalyticsClient(clientId, clientSecret, refreshToken);
Program obj = new Program();
obj.CreateAutomlAnalysis(ac);
}
catch (ServerException ex)
{
Console.WriteLine("Server exception - " + ex.GetErrorMessage());
}
catch (Exception ex)
{
Console.WriteLine("Other exception - " + ex.Message);
}
}
}
}Copiedpackage main
import (
"fmt"
ZAnalytics "zoho/pkg/analyticsclient"
)
var (
clientId = "1000.xxxxxxx"
clientSecret = "xxxxxxx"
refreshToken = "1000.xxxxxxx.xxxxxxx"
orgId = "55522777"
workspaceId = "35130000001055707"
)
func CreateAutoMLAnalysis(ac ZAnalytics.Client) {
automlName := "Sales Analysis - Go SDK"
trainingTableID := "466206000000061002"
predictionType := "CLASSIFICATION"
features := []interface{}{
"Region",
"Product Category",
"Sales",
}
serverOption := 1
algorithms := map[string]interface{}{
"decisionTreeClassification": map[string]interface{}{
"minimumSampleSplit": "2",
"maximumDepth": "100",
},
"randomForestClassification": map[string]interface{}{
"minimumSampleSplit": "2",
"maximumDepth": "100",
"numberOfTrees": "25",
},
}
config := map[string]interface{}{
"description": "Sales Table Analysis...",
"targetColumn": "Product",
}
workspace := ZAnalytics.GetWorkspaceInstance(&ac, orgId, workspaceId)
automlID, exception := workspace.CreateAutoMLAnalysis(
automlName,
trainingTableID,
predictionType,
features,
serverOption,
algorithms,
config,
)
if exception != nil {
fmt.Println("Error:", exception)
return
}
fmt.Println("Created AutoML Analysis ID:", automlID)
}
func main() {
ac := ZAnalytics.GetAnalyticsClient(clientId, clientSecret, refreshToken)
CreateAutoMLAnalysis(ac)
}Copiedimport com.zoho.analytics.client.*;
import org.json.*;
public class Test {
private long orgId = 55522777l;
private long workspaceId = 35130000001055707l;
public static void main(String args[]) {
String clientId = "1000.xxxxxxx";
String clientSecret = "xxxxxxx";
String refreshToken = "1000.xxxxxxx.xxxxxxx";
Test tObj = new Test();
AnalyticsClient ac = new AnalyticsClient(clientId, clientSecret, refreshToken);
try {
tObj.createAutoMLAnalysis(ac);
}
catch (ServerException ex) {
System.out.println("Server exception - ErrorCode : " + ex.getErrorCode()
+ ", ErrorMessage : " + ex.getErrorMessage());
}
catch (ParseException ex) {
System.out.println("Parser exception - ErrorMessage : " + ex.getResponseMessage());
}
catch (Exception ex) {
System.out.println("Other exception - ");
ex.printStackTrace();
}
}
public void createAutoMLAnalysis(AnalyticsClient ac) throws Exception {
String automlName = "Sales Analysis Java SDk";
String trainingTableId = "466206000000061002";
String predictionType = "CLASSIFICATION";
JSONArray features = new JSONArray();
features.put("Region");
features.put("Product Category");
features.put("Sales");
int serverOption = 1;
JSONObject decisionTree = new JSONObject();
decisionTree.put("minimumSampleSplit", "2");
decisionTree.put("maximumDepth", "100");
JSONObject randomForest = new JSONObject();
randomForest.put("minimumSampleSplit", "2");
randomForest.put("maximumDepth", "100");
randomForest.put("numberOfTrees", "25");
JSONObject algorithms = new JSONObject();
algorithms.put("decisionTreeClassification", decisionTree);
algorithms.put("randomForestClassification", randomForest);
JSONObject config = new JSONObject();
config.put("description", "Sales Table Analysis...");
config.put("targetColumn", "Product");
WorkspaceAPI workspace = ac.getWorkspaceInstance(orgId, workspaceId);
String automlId = workspace.createAutoMLAnalysis(
automlName,
trainingTableId,
predictionType,
features,
serverOption,
algorithms,
config
);
System.out.println("Created AutoML Analysis ID: " + automlId);
}
}Copied<?php
require 'AnalyticsClient.php';
class Test
{
public $ac = NULL;
public $client_id = "1000.xxxxxxx";
public $client_secret = "xxxxxxx";
public $refresh_token = "1000.xxxxxxx.xxxxxxx";
public $org_id = "55522777";
public $workspace_id = "35130000001055707";
function __construct() {
$this->ac = new AnalyticsClient($this->client_id, $this->client_secret, $this->refresh_token);
}
function createAutoMLAnalysis() {
$automl_name = "Sales Analysis";
$training_table_id = "466206000000061002";
$prediction_type = "CLASSIFICATION";
$features = array("Region", "Product Category", "Sales");
$server_option = 1;
$algorithms = array(
"decisionTreeClassification" => array(
"minimumSampleSplit" => "2",
"maximumDepth" => "100"
),
"randomForestClassification" => array(
"minimumSampleSplit" => "2",
"maximumDepth" => "100",
"numberOfTrees" => "25"
)
);
$config = array(
"description" => "Sales Table Analysis...",
"targetColumn" => "Product"
);
$workspace = $this->ac->getWorkspaceInstance($this->org_id, $this->workspace_id);
$automl_id = $workspace->createAutoMLAnalysis(
$automl_name,
$training_table_id,
$prediction_type,
$features,
$server_option,
$algorithms,
$config
);
echo "Created AutoML Analysis ID: " . $automl_id . PHP_EOL;
}
}
$test_obj = new Test();
try {Copiedfrom __future__ import with_statement
from AnalyticsClient import AnalyticsClient
import sys
import json
class Config:
CLIENTID = "1000.xxxxxxx"
CLIENTSECRET = "xxxxxxx"
REFRESHTOKEN = "1000.xxxxxxx.xxxxxxx"
ORGID = "55522777"
WORKSPACEID = "35130000001055707"
class Sample:
ac = AnalyticsClient(Config.CLIENTID, Config.CLIENTSECRET, Config.REFRESHTOKEN)
def create_automl_analysis(self, ac):
automl_name = "Sales Analysis"
training_table_id = "466206000000061002"
prediction_type = "CLASSIFICATION"
features = ["Region", "Product Category", "Sales"]
server_option = 1
algorithms = {
"decisionTreeClassification": {
"minimumSampleSplit": "2",
"maximumDepth": "100"
},
"randomForestClassification": {
"minimumSampleSplit": "2",
"maximumDepth": "100",
"numberOfTrees": "25"
}
}
config = {
"description": "Sales Table Analysis...",
"targetColumn": "Product"
}
workspace = ac.get_workspace_instance(Config.ORGID, Config.WORKSPACEID)
automl_id = workspace.create_automl_analysis(
automl_name,
training_table_id,
prediction_type,
features,
server_option,
algorithms,
config
)
print("Created AutoML Analysis ID:", automl_id)
try:
obj = Sample()
obj.create_automl_analysis(obj.ac)
except Exception as e:
print(str(e))Copiedvar analyticsClient = require('./AnalyticsClient');
var clientId = '';
var clientSecret = '';
var refreshToken = '';
var orgId = '';
var workspaceId = '';
var automlName = "Sales Analysis";
var trainingTableId = "466206000000061002";
var predictionType = "CLASSIFICATION";
var features = [];
features.push("Region");
features.push("Product Category");
features.push("Sales");
var serverOption = 1;
var algorithms = {
decisionTreeClassification: {
minimumSampleSplit: "2",
maximumDepth: "100"
},
randomForestClassification: {
minimumSampleSplit: "2",
maximumDepth: "100",
numberOfTrees: "25"
}
};
var config = {};
config.description = "Sales Table Analysis";
config.targetColumn = "Product";
var ac = new analyticsClient(clientId, clientSecret, refreshToken);
var workspace = ac.getWorkspaceInstance(orgId, workspaceId);
workspace.createAutomlAnalysis(
automlName,
trainingTableId,
predictionType,
features,
serverOption,
algorithms,
config
)
.then((automlId) => {
console.log("Created AutoML Analysis ID:", automlId);
})
.catch((error) => {
console.log('errorCode : ' + error.errorCode);
console.log('errorMessage : ' + error.errorMessage);
});Copiedrequire 'zoho_analytics_client'
class Config
CLIENT_ID = "1000.xxxxxxx"
CLIENT_SECRET = "xxxxxxx"
REFRESH_TOKEN = "1000.xxxxxxx.xxxxxxx"
ORG_ID = "55522777"
WORKSPACE_ID = "35130000001055707"
end
class Sample
def initialize
@ac = AnalyticsClient.new
.with_data_center("US")
.with_oauth({
"clientId" => Config::CLIENT_ID,
"clientSecret" => Config::CLIENT_SECRET,
"refreshToken" => Config::REFRESH_TOKEN
})
#.with_token_store_path("/home/admin/analytics_ruby_sdk/tokens") # Optional – specify a directory path to securely store the encrypted access token
.build
end
def create_automl_analysis
automl_name = "Sales Analysis - Ruby SDK"
training_table_id = "466206000000061002"
prediction_type = "CLASSIFICATION"
features = ["Region", "Product Category", "Sales"]
server_option = 1
algorithms = {
"decisionTreeClassification" => {
"minimumSampleSplit" => "2",
"maximumDepth" => "100"
},
"randomForestClassification" => {
"minimumSampleSplit" => "2",
"maximumDepth" => "100",
"numberOfTrees" => "25"
}
}
config = {
"description" => "Sales Table Analysis...",
"targetColumn" => "Product"
}
workspace = @ac.get_workspace_instance(Config::ORG_ID, Config::WORKSPACE_ID)
automl_id = workspace.create_automl_analysis(
automl_name,
training_table_id,
prediction_type,
features,
server_option,
algorithms,
config
)
puts "Created AutoML Analysis ID: #{automl_id}"
end
end
begin
obj = Sample.new
obj.create_automl_analysis
rescue ServerError => e
puts "Server Error: #{e.response_content}"
rescue StandardError => e
puts e.message
puts e.backtrace.join("\n")
endDownload SDKs: C# | GO | JAVA | PHP | PYTHON | NodeJS | Ruby
Sample value for CONFIG parameter:
Copied{
"name": "Analysis-1",
"trainingTableId": 2531676000011845000,
"targetColumn": "Sales",
"predictionType": "CLASSIFICATION",
"features": [
"Cost",
"Region",
"Product"
],
"serverOption": 1,
"algorithms": {
"decisionTreeClassification": {
"minimumSampleSplit": "2",
"maximumDepth": "2"
},
"randomForestClassification": {
"minimumSampleSplit": "2",
"maximumDepth": "2",
"numberOfTrees": "25"
}
}
}Sample Response:
CopiedHTTP/1.1 200 OK
Content-Type:application/json;charset=UTF-8
{
"status": "success",
"summary": "Create autoML analysis",
"data": {
"id": "466206000000178110"
}
}