ClassificationSolutionVersion - Global

  • Versão de lançamento: Yokohama
  • Atualizado 30 de jan. de 2025
  • 12 min. de leitura
  • A API ClassificationSolutionVersion é um objeto programável usado em armazenamentos Inteligência preditiva.

    Este A API requer o plug-in Inteligência preditiva (com.glide.platform_ml) e é fornecida no namespace sn_ml.

    Esta API é usada para trabalhar com versões de solução baseadas em objetos da API ClassificationSolution no armazenamento ClassificationSolution.

    O sistema cria uma versão de solução sempre que você treina uma definição de solução. A maioria das versões é criada durante o treinamento programado da solução.

    Os métodos nesta API podem ser acessados usando os seguintes ClassificationSolution - Global métodos:

    ClassificationSolutionVersion - getPredictionPerformance(Opções de objeto)

    Calcula a precisão e a cobertura da solução.

    Para usar este método, você deve primeiro criar configurações usando o método setPredictionSettings().

    Tabela 1. Parâmetros
    Nome Tipo Descrição
    opções Objeto Seleciona uma métrica a ser recuperada em um período de datas. Para obter mais informações, consulte Configuração de métricas de destino.
    {
      "fromDate": "String",
      "metricName": "String",
      "toDate": "String"
    }
    opções.deData Cadeia de caracteres Opcional. Data de início a partir da qual as métricas serão recuperadas no formato de data e hora do sistema.
    opções.metricName Cadeia de caracteres Nome da métrica.
    Valores válidos:
    • precision
    • coverage
    opções.toDate Cadeia de caracteres Opcional. Data de término a partir da qual as métricas serão recuperadas.

    Formulário: formato de data e hora do sistema.

    Tabela 2. Retornos
    Tipo Descrição
    Objeto Objeto JavaScript analisável que contém os resultados da métrica de entrada.
    {
      "metricName" : "String",
      "metricValue" : "String",
      "numberOfPredictionsConsidered" : "String"
    }
    Objeto.metricName Nome da métrica selecionada como entrada.

    Tipo de dados: cadeia de caracteres

    Objeto.ValorDamétrica Valor da métrica selecionada.

    Tipo de dados: cadeia de caracteres

    Objeto.númeroDeRegistrosConsiderados Número de registros na tabela Resultados de previsão [ml_predictor_results] considerados para cálculos.

    Tipo de dados: cadeia de caracteres

    O exemplo a seguir mostra como obter um valor de precisão da versão ativa de uma solução.

    // Get precision value
    var mlSolution = sn_ml.ClassificationSolutionStore.get('ml_incident_categorization');
    
    gs.print(JSON.stringify(JSON.parse(mlSolution.getActiveVersion().getPredictionPerformance({"metricName": "precision"})), null, 2));

    Saída:

    {
      "metricName": "precision",
      "metricValue": "70.10",
      "numberOfPredictionsConsidered": "10"
    }

    ClassificationSolutionVersion - getPredictionSettings()

    Obtém precisão estimada, cobertura estimada, valores de recall estimados da tabela Soluções de ML [ml_solution] e registros da tabela Confiança de classe [ml_class].

    Tabela 3. Parâmetros
    Nome Tipo Descrição
    Nenhum
    Tabela 4. Retorna
    Tipo Descrição
    Objeto Retorna configurações de previsão para cada classe. Os dados incluem valores de precisão, cobertura, recall e distribuição de todas as classes incluídas no modelo treinado da tabela Soluções de ML [ml_solution]. Para obter detalhes, consulte Componentes do modelo preditivo.
    {
      "<class name>": {Object}
    }
    <Object>.<class name> Dados de estatísticas de treinamento da tabela Confiança de classe [ml_class]. Para obter mais informações, consulte Configuração de métricas de destino.

    Tipo de dados: objeto

    {
      "precision": "String",
      "coverage": "String",
      "recall": "String"
    }
    <Object>.<class name> .precisão Métrica de precisão da solução estimada para esta classe.

    Tipo de dados: cadeia de caracteres (valor numérico)

    <Object>.<class name> .cobertura Métrica de cobertura de solução estimada para esta classe.

    Tipo de dados: cadeia de caracteres (valor numérico)

    <Object>.<class name> .recall Métrica de recall de solução estimada para esta classe.

    Tipo de dados: cadeia de caracteres (valor numérico)

    O exemplo a seguir mostra como obter configurações de previsão de uma versão de solução ativa.

    var mlSolution = sn_ml.ClassificationSolutionStore.get('ml_incident_categorization');
    
    gs.print(JSON.stringify(JSON.parse(mlSolution.getActiveVersion().getPredictionSettings()), null, 2));

    Saída:

    {
      "solutionSettings": {
        "precision": "61.69",
        "coverage": "66.75",
        "recall": "57.54"
      },
      "classSettings": {
        "Approvals": {
          "precision": "100",
          "coverage": "0",
          "recall": "0"
        },
        "Authentication": {
          "precision": "38.71",
          "coverage": "98.44",
          "recall": "56.25"
        },
        "Automation": {
          "precision": "100",
          "coverage": "0",
          "recall": "0"
        }, ...

    ClassificationSolutionVersion - getProperties()

    Obtém propriedades do objeto de solução e número da versão.

    Tabela 5. Parâmetros
    Nome Tipo Descrição
    Nenhum
    Tabela 6. Retorna
    Tipo Descrição
    Objeto Conteúdos dos detalhes da versão do conjunto de dados e ClassificationSolution. Os resultados variam de acordo com a configuração da propriedade do objeto.
    {
      "algorithmConfig": {
        "algorithm": "String",
        "targetClassRecall": "String"
      },
      "datasetProperties": {Object},
      "domainName": "String",
      "encoder": {Object},
      "groupByFieldName": "String",   
      "inputFieldNames": [Array],
      "isActive": Boolean,
      "label": "String",
      "name": "String",
      "predictedFieldName": "String",
      "processingLanguage": "String",
      "scope": "String",
      "stopwords": [Array],
      "stopwords": [Array],
      "trainingFrequency": "String",
      "versionNumber": "Number"
    }
    <Object>.algorithmConfig Método para codificar a solução.

    Tipo de dados: objeto

    <Object>.algoritmoConfig.algoritmo Nome do algoritmo de codificação para treinar esta solução.
    Valores possíveis:
    • xgboost: codificação XGBOOST para otimizar o treinamento.
    • logisticRegression: método que usa o modelo de regressão logística para destinos categóricos, como nominal ou ordinal.

    Tipo de dados: cadeia de caracteres

    <Object>.algorithmConfig.targetClassRecall Parâmetro de recall de classe para orientar o treinamento de uma solução para direcionar uma classe específica. O valor de recall é um número entre 0 e 100 que representa uma porcentagem.

    Tipo de dados: cadeia de caracteres

    <Object>.datasetProperties

    Lista as propriedades do objeto DatasetDefinition() associado à solução.

    Tipo de dados: objeto

    {
      "encodedQuery": "String",
      "fieldDetails": [Array],
      "fieldNames": [Array],
      "tableName": "String"
    }
    <Object>.datasetProperties.tableName Nome da tabela para o conjunto de dados. Por exemplo, "tableName" : "Incidente".

    Tipo de dados: cadeia de caracteres

    <Object>.datasetProperties.fieldNomes Lista de nomes de campo da tabela especificada como cadeias de caracteres. Por exemplo, "fieldNames" : ["short_description", "priority"].

    Tipo de dados: matriz

    <Object>.datasetProperties.fieldNames.fieldDetails Lista de objetos JavaScript que especificam propriedades de campo.

    Tipo de dados: matriz de objetos

    [
      {
        "name": "String",
        "type": "String"
      }
    ]
    <Object>.datasetProperties.fieldNames.fieldDetails.<object>.nome Nome do campo que define o tipo de informação ao qual este conjunto de dados será restrito.

    Tipo de dados: cadeia de caracteres

    <Object>.datasetProperties.fieldDetails.<object>.type Tipo de campo de aprendizado de máquina.

    Tipo de dados: cadeia de caracteres

    <Object>.datasetProperties.fieldDetails.encodedQuery Cadeia de caracteres de consulta codificada no formato Glide padrão. Consulte Cadeias de caracteres de consulta codificadas.

    Tipo de dados: cadeia de caracteres

    <Object>.domainName Nome do domínio associado a este conjunto de dados. Consulte Separação de domínios e Inteligência preditiva.

    Tipo de dados: cadeia de caracteres

    <Object>.codificador Objeto de codificador atribuído a esta solução. Consulte Codificador - Codificador (configuração de objeto).

    Tipo de dados: objeto

    <Object>.groupByFieldName Nome do campo pelo qual o sistema agrupa registros para criar soluções de classificação.

    Tipo de dados: cadeia de caracteres

    <Object>.inputFieldNames Lista de nomes de campos de entrada como cadeias de caracteres. O modelo usa esses campos usados para fazer previsões.

    Tipo de dados: cadeia de caracteres

    <Object>.isActive Sinalizador que indica se esta versão está ativa.
    Valores válidos:
    • verdadeiro: a versão está ativa.
    • falso: a versão não está ativa.

    Tipo de dados: cadeia de caracteres

    <Object>.rótulo Identifica a tarefa de previsão.
    {
      "label": "my first prediction"
    }

    Tipo de dados: cadeia de caracteres

    <Object>.nome Nome atribuído pelo sistema.

    Tipo de dados: cadeia de caracteres

    <Object>.predictedFieldName Identifica um campo a ser treinado para previsibilidade.

    Tipo de dados: cadeia de caracteres

    <Object>.processingLanguage Idioma de processamento no formato de código de idioma ISO 639-1 de duas letras.

    Tipo de dados: cadeia de caracteres

    <Object>.escopo Escopo do objeto. Atualmente, o único valor válido é global.

    Tipo de dados: cadeia de caracteres

    <Object>.palavras irrelevantes Opcional. Lista predefinida de cadeias de caracteres que o sistema gera automaticamente com base na configuração da propriedade language. Para obter detalhes, consulte Criação de uma lista de palavras irrelevantes personalizada.

    Tipo de dados: matriz

    <Object>.trainingFrequency A frequência para retreinar o modelo.
    Valores possíveis:
    • a cada_30_dias
    • a cada_60_dias
    • a cada_90_dias
    • a cada_120_dias
    • a cada_180_dias
    • run_once
    Padrão: run_once

    Tipo de dados: cadeia de caracteres

    <Object>.versionNumber Objeto Número da versão do ClassificationSolution.

    Tipo de dados: cadeia de caracteres

    O exemplo a seguir obtém propriedades da versão do objeto ativo no armazenamento.

    // Get properties
    var mlSolution = sn_ml.ClassificationSolutionStore.get('ml_incident_categorization');
    
    gs.print(JSON.stringify(JSON.parse(mlSolution.getActiveVersion().getProperties()), null, 2));

    Saída:

    *** Script: {
      "datasetProperties": {
        "encodedQuery": "activeANYTHING^EQ",
        "fieldNames": [
          "short_description",
          "category"
        ],
        "tableName": "incident"
      },
      "domainName": "global",
      "inputFieldNames": [
        "short_description"
      ],
      "isActive": "true",
      "label": "Incident Categorization_Trainer",
      "name": "ml_incident_categorization",
      "predictedFieldName": "category",
      "processingLanguage": "en",
      "stopwords": [
        "Default English Stopwords"
      ],
      "versionNumber": "1"
    }

    ClassificationSolutionVersion - getStatus(Booliano includeDetails)

    Obtém o status de conclusão do treinamento.

    Tabela 7. Parâmetros
    Nome Tipo Descrição
    includeDetails Booliano Sinalizador que indica se o status deve ser retornado details.
    Valores válidos:
    • verdadeiro: retorna detalhes adicionais.
    • falso: não retorna detalhes adicionais.

    Padrão: falso

    Tabela 8. Retornos
    Tipo Descrição
    Objeto Objeto JavaScript que contém informações de status de treinamento para um objeto ClassificationSolution.
    {
      "state": "String",
      "percentComplete": "Number as a String",
      "hasJobEnded": "Boolean value as a String",
      "details": {Object}
    }
    <Object>.state Estado de conclusão do treinamento. Se o trabalho de treinamento atingir um estado terminal, o trabalho não sairá desse estado. Se o estado for terminal, a propriedade hasJobEnded será definida como verdadeira.
    Valores possíveis:
    • buscando_arquivos_para_treinamento
    • preparação_dados
    • tentar novamente
    • solution_cancelled (terminal)
    • solution_complete (terminal)
    • solution_error (terminal)
    • solução_incompleta
    • treinamento_request_recebido
    • treinamento_request_timed_out (terminal)
    • solução_treinamento
    • carregando_solução
    • aguardando_treinamento

    Tipo de dados: cadeia de caracteres

    <Object>.hasJobEnded Sinalizador que indica se o treinamento foi concluído.
    Valores válidos:
    • verdadeiro: o treinamento está concluído.
    • falso: o treinamento está incompleto.

    Tipo de dados: valor booliano como cadeia de caracteres

    <Object>.percentConcluído Percentual de treinamento concluído. Se a porcentagem de conclusão for inferior a 100, o trabalho poderá estar em um estado terminal. Por exemplo, se o treinamento expirar.

    Tipo de dados: número como cadeia de caracteres

    Intervalo: 0 a 100

    <Object>.detalhes Objeto que contém uma lista de detalhes de treinamento adicionais.

    Tipo de dados: objeto

    O exemplo a seguir mostra um resultado bem-sucedido com o treinamento concluído.

    // Get status
    var mlSolution = sn_ml.ClassificationSolutionStore.get('ml_incident_categorization');
    
    gs.print(JSON.stringify(JSON.parse(mlSolution.getActiveVersion().getStatus(true), null, 2)));

    Saída:

    {
     "state":"solution_complete",
     "percentComplete":"100",
     "hasJobEnded":"true",
     "details":{"stepLabel":"Solution Complete"} // This information is only returned if getStatus(true);
    }

    O exemplo a seguir mostra um resultado malsucedido com o treinamento concluído.

    // Get status
    var solutionName = 'ml_x_snc_global_global_classification_solution';
    var mlSolution = sn_ml.ClassificationSolutionStore.get(solutionName);
    var trainingStatus = mlSolution.getLatestVersion().getStatus();
    
    gs.print(JSON.stringify(JSON.parse(trainingStatus), null, 2));

    Saída:

    {
     "state":"solution_error",
     "percentComplete":"100",
     "hasJobEnded":"true"
    }

    ClassificationSolutionVersion - getTrainingStatistics()

    Obtém todas as estatísticas de treinamento para uma determinada solução.

    Tabela 9. Parâmetros
    Nome Tipo Descrição
    Nenhum
    Tabela 10. Retorna
    Tipo Descrição
    Objeto Objeto JavaScript com estatísticas para cada classe incluída no treinamento e valores para cada classe que foi excluída do treinamento. Para obter detalhes, consulte Componentes do modelo preditivo.
    {
      "includedClasses": {Object},
      "excludedClasses": {Object}
    }
    <Object>.includedClasses Objeto que contém valores de precisão, cobertura, recall e distribuição de cada classe no modelo treinado.

    Tipo de dados: objeto

    
      "includedClasses": {
        "<class name>": {
          "distribution": "String",
          "statistics": [Array]
        },
    <Object>.includedClasses.<class name> .distribuição Valor da distribuição de probabilidade de resultado para esta classe.

    Tipo de dados: cadeia de caracteres

    <Object>.includedClasses.<class name> .estatísticas Lista de objetos que fornecem dados estatísticos de treinamento. Para obter mais informações, consulte Configuração de métricas de destino.

    Tipo de dados: matriz de objetos

    [
      {
        "coverage": "String",
        "precision": "String",
        "recall": "String",
        "selected": "String"
      }
    ]
    <Object>.includedClasses.<class name> .estatística.cobertura Métrica de cobertura de solução estimada para esta classe.

    Tipo de dados: cadeia de caracteres (valor numérico)

    <Object>.includedClasses.<class name> .estatística.precisão Métrica de precisão da solução estimada para esta classe.

    Tipo de dados: cadeia de caracteres (valor numérico)

    <Object>.includedClasses.<class name> .estatística.recall Métrica de recall de solução estimada para esta classe.

    Tipo de dados: cadeia de caracteres (valor numérico)

    <Object>.includedClasses.<class name> .estatísticas.selecionadas Sinalizador que indica se esta classe contém registros incluídos no treinamento da solução.
    Valores válidos:
    • verdadeiro: esta classe contém registros selecionados para treinar a solução.
    • falso: esta classe foi excluída do treinamento.

    Tipo de dados: cadeia de caracteres (valor booliano)

    Padrão: falso

    <Object>.excludedClasses Distribuição e contagem de linhas de todas as classes excluídas do treinamento.

    Tipo de dados: objeto

    
      "excludedClasses": {
        "<class name>": {
          "distribution": "0.11",
          "rowCount": "9"
        }
    <Object>.excludedClasses.<class name> .distribuição Valor da distribuição de probabilidade de resultado para esta classe.

    Tipo de dados: cadeia de caracteres

    <Object>.excludedClasses.<class name> .rowCount Número de linhas excluídas do treinamento.

    Tipo de dados: cadeia de caracteres (valor numérico)

    O exemplo a seguir mostra como obter estatísticas de treinamento da solução ativa.

    // Get training stats
    var mlSolution = sn_ml.ClassificationSolutionStore.get('ml_incident_categorization');
    
    gs.print(JSON.stringify(JSON.parse(mlSolution.getActiveVersion().getTrainingStatistics()), null, 2));

    Saída:

    {
      "includedClasses": {
        "Approvals": {
          "distribution": "0.43",
          "statistics": [
            {
              "precision": "100",
              "coverage": "0",
              "recall": "0",
              "selected": "true"
            }
          ]
        }, 
        "Authentication": {
          "distribution": "4.3",
          "statistics": [
            {
              "precision": "39.33",
              "coverage": "95.31",
              "recall": "54.69",
              "selected": "false"
            },
            {
              "precision": "100",
              "coverage": "0",
              "recall": "0",
              "selected": "false"
            },
         ...
        }
        ...
      "excludedClasses": {
        "ACE": {
          "distribution": "0.11",
          "rowCount": "9"
        },
        "AHA": {
          "distribution": "0.01",
          "rowCount": "1"
        }, 
        ...
    }

    ClassificationSolutionVersion - getVersionNumber()

    Obtém o número da versão de um objeto de solução.

    Tabela 11. Parâmetros
    Nome Tipo Descrição
    Nenhum
    Tabela 12. Retorna
    Tipo Descrição
    Cadeia de caracteres Número da versão.

    O exemplo a seguir mostra como obter um número de versão.

    // Get version number
    var mlSolution = sn_ml.ClassificationSolutionStore.get('ml_incident_categorization');
    
    gs.print("Version number: "+JSON.stringify(JSON.parse(mlSolution.getActiveVersion().getVersionNumber()), null, 2));

    Saída:

    Version number: 1

    ClassificationSolutionVersion - prever (entrada de objeto, opções de objeto)

    Obtém os dados de entrada para uma previsão.

    Tabela 13. Parâmetros
    Nome Tipo Descrição
    entrada Objeto GlideRecord ou matriz de objetos JSON que contém nomes e valores de campo como pares de chave-valor.
    opções Objeto Valores opcionais para filtrar resultados de previsão.
    {
      "apply_threshold": Boolean,
      "top_n": Number
    }
    opções.apply_threshold Booliano Sinalizador que indica se o valor de limite da solução deve ser verificado e aplicado ao conjunto de resultados.
    Valores válidos:
    • verdadeiro: retorna resultados em que a confiança é maior que o limite.
    • falso: retorna todos os resultados.

    Padrão: verdadeiro

    opções.top_n Número Se fornecido, retorna os principais resultados, até o número especificado de previsões.
    Tabela 14. Retornos
    Tipo Descrição
    Objeto Objeto JSON que contém os resultados da previsão classificados por sys_id ou record_number.
    {
        <identifier>: [Array]
    }
    <Object>.<identifier> Lista de objetos com detalhes para cada resultado de previsão.

    Tipo de dados: matriz de objetos

    <identifier>: [
      {
        "confidence": Number,
        "predictedSysId": "String",
        "predictedValue": "String", 
        "threshold": Number
      }
    ]
    <Object>.<identifier> .<object>.confiança Valor da confiança associada à previsão. Por exemplo, 53,84.

    Tipo de dados: número

    <Object>.<identifier> .<object>.predictedSysId O sys_id do valor previsto. Os resultados podem ser de qualquer tabela na qual as informações estão sendo previstas.

    Tipo de dados: cadeia de caracteres

    <Object>.<identifier> .<object>.predictedValue Valor que representa o resultado da previsão.

    Tipo de dados: cadeia de caracteres

    <Object>.<identifier> .<object>.threshold Valor do limite configurado associado à previsão.

    Tipo de dados: número

    O exemplo a seguir mostra como exibir resultados de previsão para um método de previsão () que usa um GlideRecord por sys_id como entrada e inclui parâmetros opcionais para restringir aos três principais resultados e excluir o valor limite.

    var mlSolution = sn_ml.ClassificationSolutionStore.get('ml_incident_categorization');
    
    // single GlideRecord input
    var input = new GlideRecord("incident");
    input.get("<sys_id>");
    
    // configure optional parameters
    var options = {};
    options.top_n = 3;
    options.apply_threshold = false;
    
    var results = mlSolution.getVersion(1).predict(input, options);
    // pretty print JSON results
    gs.print(JSON.stringify(JSON.parse(results), null, 2));

    Saída:

    {
      "<sys_id/gr>": [
        {
          "confidence": 62.10782320780268,
          "threshold": 20.36,
          "predictedValue": "Clone Issues",
          "predictedSysId": ""
        },
        {
          "confidence": 6.945237375770391,
          "threshold": 16.63,
          "predictedValue": "Instance Administration",
          "predictedSysId": ""
        },
        {
          "confidence": 5.321061076300759,
          "threshold": 23.7,
          "predictedValue": "Administration",
          "predictedSysId": ""
        }
      ]
    }

    O exemplo a seguir mostra como exibir resultados de previsão para um método de previsão () que usa uma matriz de nomes de campo como pares de chave-valor para entrada e inclui parâmetros opcionais para restringir aos três principais resultados e excluir o valor limite.

    var mlSolution = sn_ml.ClassificationSolutionStore.get('ml_incident_categorization');
    
    // key-value pairs input
    var input = [{"short_description":"my email is not working"}, {short_description:"need help with password"}];
    
    // configure optional parameters
    var options = {};
    options.top_n = 3;
    options.apply_threshold = false;
    var results = mlSolution.predict(input, options);
    
    // pretty print JSON results
    gs.print(JSON.stringify(JSON.parse(results), null, 2));

    Saída:

    {
      "1": [
        {
          "confidence": 37.5023032262591,
          "threshold": 10.72,
          "predictedValue": "Authentication",
          "predictedSysId": ""
        },
        {
          "confidence": 24.439964862166583,
          "threshold": 23.7,
          "predictedValue": "Administration",
          "predictedSysId": ""
        },
        {
          "confidence": 11.736320486031047,
          "threshold": 100,
          "predictedValue": "Security",
          "predictedSysId": ""
        }
      ],
      "2": [
        {
          "confidence": 99,
          "threshold": 17.77,
          "predictedValue": "Email",
          "predictedSysId": ""
        },
        {
          "confidence": 3.182137005157543,
          "threshold": 10.72,
          "predictedValue": "Authentication",
          "predictedSysId": ""
        },
        {
          "confidence": 2.8773826570713514,
          "threshold": -1,
          "predictedValue": "Email (I/f)",
          "predictedSysId": ""
        }
      ]
    }

    ClassificationSolutionVersion - setPredictionSettings(Opções de objeto)

    Define valores de precisão, cobertura ou recall no nível de solução ou de classe.

    Tabela 15. Parâmetros
    Nome Tipo Descrição
    opções Objeto Valores de configuração de métrica. Para obter informações sobre esses recursos, consulte Configuração de métricas de destino.
    {  	 
       "metricName" : "String",
       "metricValue" : "String",
       "className" : "String"
    }
    opções.metricName Cadeia de caracteres Nome da métrica a ser definida.
    Valores válidos:
    • coverage
    • precision
    • recall
    opções.metricValue Cadeia de caracteres Valor numérico a ser atribuído à métrica.
    opções.className Cadeia de caracteres Opcional. Nome da classe para restringir os resultados. Use o método getTrainingStatistics() para recuperar uma lista completa de classes para uma solução.
    Tabela 16. Retornos
    Tipo Descrição
    Nenhum(a)

    O exemplo a seguir mostra como definir uma métrica de precisão como 89,5 para uma classe chamada Problemas de clone.

    var mlSolution = sn_ml.ClassificationSolutionStore.get('ml_x_snc_global_global_classification');
    var input = {"metricName" : "precision", "metricValue" : "89.5", "className" : "Clone Issues"};
    
    mlSolution.getActiveVersion().setTrainingStatistics(input);