Использовать сторонние модели прогнозирования временных рядов в ArcGIS

Группа инструментов Временные ряды ИИ в наборе инструментов GeoAI содержит инструменты, предназначенные для анализа и обработки данных временных рядов. Этот набор инструментов содержит инструменты обучения и прогнозирования будущих значений в местоположениях куба Пространство-время. Они поддерживают обучение и использование различных моделей прогнозирования временных рядов на основе глубокого обучения, к примеру, Fully Connected Networks (FCN), Long Short-Term Memory (LSTM), InceptionTime, ResNet и ResCNN.

Хотя эти готовые модели надежны и эффективны, для достижения оптимальной производительности они требуют обширного обучения на больших наборах данных временных рядов, специфичных для конкретной области. Однако вам может потребоваться индивидуальный рабочий процесс, например, для интеграции новых моделей, включая базовые модели временных рядов, предлагающие готовые решения для прогнозирования. Эти базовые модели предварительно обучены на обширных и разнообразных наборах данных временных рядов и могут применяться напрямую для прогнозирования будущих событий на основе определенных входных данных без необходимости осуществления дополнительного обучения. Возможность обобщения различных наборов данных временных рядов делает их весьма универсальными.

Разработчики Python могут создавать пользовательские функции временных рядов для интеграции ArcGIS с этими внешними сторонними моделями и упаковывать их в пакеты глубокого обучения Esri (файлы .dlpk) для их использования инструментом Прогнозирование с помощью модели временных рядов.

Пользовательская функция временных рядов Python

Вы можете создать функцию временных рядов в Python для интеграции сторонних моделей временных рядов в конвейер прогнозирования временных рядов.

Методы функции временных рядов перечислены в следующей таблице и более подробно описаны в разделах ниже.

МетодОписание

__init__

Инициализируйте переменные экземпляра, такие как name, description и другие атрибуты, необходимые для функции временных рядов.

initialize

Загрузите модели временных рядов и установите любые исходные конфигурации. Используйте этот метод в начале функции временных рядов Python.

getParameterInfo

Определите параметры, которые принимает функция временных рядов. Сюда относятся любые настройки конфигурации, необходимые для загрузки или подключения к модели, а также параметры, необходимые для обработки временных рядов.

getConfiguration

Опишите, как инструмент будет выполнять обработку и создание выходных данных. Это включает подробную информацию для любых шагов предварительной обработки и постобработки, необходимых для функции.

predict

Функция, отвечающая за преобразование введенных данных в желаемый результат. Она использует заданные параметры и логику обработки для создания конечного результата.

Методы функции

Методы функции временных рядов описаны далее.

__init__

Метод __init__ является конструктором пользовательской функции временных рядов и инициализирует переменные экземпляра, такие как имя, описание и другие основные атрибуты. Этот метод задает свойства, которые определяют поведение и характеристики функции временных рядов.

Конструктор создает экземпляр пользовательского класса временных рядов со всеми атрибутами, полезными для обработки и анализа. При создании экземпляра класса временных рядов этот метод обеспечивает его инициализацию с требуемыми настройками и значениями по умолчанию. Например, если функция временных рядов требует определенных настроек, таких как путь к папке, содержащей веса модели и файл конфигурации, их можно указать в этом методе.


class MyTimesFM:
    def __init__(self, **kwargs):
        """
        It sets up the initial state of an object by defining its attributes,
        such as name, description, and other properties.

        """
        self.name = "TimeSeriesForecast"
        self.description = '''The `MyTimesFM` class is designed to perform time series forecasting tasks.'''

        # Additional initialization code here

initialize

Метод initialize вызывается в начале пользовательской функции временных рядов Python, и этому методу передается аргумент kwargs['model']. Аргумент kwargs['model'] является путем к файлу определения модели Esri (.emd). Этот метод следует использовать для загрузки весов модели, чтобы настроить модель временных рядов, обеспечивая привязку к ней для последующих операций.


def initialize(self, **kwargs):
    """
    Initialize model parameters, such as loading pretrained model weights.
    """
    json_file = kwargs['model']
    with open(json_file, 'r') as f:
        self.json_info = json.load(f)
    
    # Access the model path in the model definition file
    model_path = json_info['ModelFile']
    # Load your model and keep an instance for the modelt
    self.model = load_your_model(model_path)
    
    # Additional initialization code here

getParameterInfo

Метод getParameterInfo вызывается инструментом Прогнозирование с помощью модели временных рядов после метода initialize и определяет параметры, требуемые моделью. Этот метод возвращает список входных параметров, ожидаемых пользовательской функцией временных рядов. Каждый параметр описывается при помощи словаря, содержащего имя, тип данных, отображаемое имя и описание параметра, а также логический параметр, определяющий, является ли параметр обязательным, как показано далее.


def getParameterInfo(self):
    return [
        {
            "name": "batch_size",
												"dataType": "long",
            "required": False,
            "displayName": "batch_size",
            "description": "The number of sequences processed in one forward pass through the model.",
            "value": "16"
        },
        {
            "name": "sequence_length",
            "dataType": "long",
            "required": True,
            "displayName": "sequence_length",
            "description": "Use the sequence length number of time steps to forecast the next user-defined time steps.",
            "value": "32"
        },
        # Additional code here
    ]

Метод возвращает список словарей, каждый из которых описывает параметр. Ключевые атрибуты словаря:

  • name — строковый идентификатор параметра
  • dataType — тип данных, допустимый для этого параметра, например, строка, логическое или список
  • value — значение по умолчанию для параметра
  • required — логическое значение, указывающее, является ли этот параметр обязательным
  • displayName — понятное пользователю имя параметра
  • domain — набор допустимых значений, если применимо
  • description — подробное описание параметра

Список параметров показывается пользователю с помощью аргументов пользовательской модели в инструменте Прогнозирование с помощью модели временных рядов. Пользователи могут задать эти значения интерактивно при помощи пользовательского интерфейса инструмента или при помощи программирования, передавая их в метод getConfiguration в качестве аргументов ключевых слов.

getConfiguration

Метод getConfiguration настраивает параметры для функции временных рядов и управляет ими. Он поддерживает аргументы ключевых слов, содержащие параметры, обновленные пользователями через инструмент или путем программирования. Этот метод также управляет тем, как функция обрабатывает и выводит данные на основе обновленных параметров. Этот метод вызывается после метода getParameterInfo и перед методом predict. Возвращаемое значение функции - словарь, содержащий значение batch_size, указывающее количество последовательностей, которые модель может обработать за один раз. Возвращаемое значение метода информирует инструмент о том, как необходимо разбить входные данные для обработки моделью, по одному пакету за раз.


def getConfiguration(self, **kwargs):
    """
    This method configures the supported time series function parameters and
    controls further processing based on them.
    """
    # Set the sequence_length and batch_size from the provided arguments
				self.sequence_length = int(kwargs.get("sequence_length"))

				# Set the batch size, limiting it to a maximum of 4
    if kwargs.get("batch_size", 0) > 4:
        kwargs["batch_size"] = 4	
				self.batch_size = kwargs.get("batch_size")

				# Set the number_of_timesteps_to_forecast from the toolset
				self.number_of_timesteps_to_forecast = kwargs.get("number_of_timesteps_to_forecast")	
						

				# Return the updated parameter values
    return kwargs

В примере, приведенном выше, пользовательская функция временных рядов настраивается следующим образом:

  • Настройка параметра sequence_length по предоставленным аргументам.
  • Задайте для параметра batch_size максимальное значение 4, если предоставлено большее значение.
  • Настройка параметра number_of_timesteps_to_forecast для группы инструментов.
  • Вернуть обновленные значения параметра.

predict

Метод predict выполняет вывод путем генерирования прогнозов с использованием модели временных рядов. Метод поддерживает двумерный массив NumPy, содержащий входные данные, и возвращает результаты в виде двумерного массива NumPy. Далее приводится типичный рабочий процесс:

  1. Предварительная обработка входных данных в соответствии с требованиями модели.
  2. Примените модель временного ряда к входным данным для создания прогнозов.


def predict(self, input_sequences):
    """
    Forecast time series data based on the input data.
    """

    # Preprocessing input code here

  		# Input_sequences is a 2d Numpy Array of shape (batch_size, total number of time steps). 
				# Adjust the input sequence length as per the model requirements. 
	   input_sequences = input_sequences[:, -self.sequence_length:]	
    
    # Make Forecasts
    forecasts = self.model.predict(input_sequences, self.number_of_timesteps_to_forecast)
    
    # Additional code here   

    # Return the forecasted values in the shape of (batch_size, number_of_timesteps_to_forecast)
    return forecasts

Файл Esri .emd

После создания пользовательской функции временных рядов Python включите ссылку на функцию в файл .emd, указав ее рядом с параметром InferenceFunction. Это гарантирует, что файл .emd правильно ссылается на функцию, делая ее доступной для использования в прогнозировании временных рядов.


{
    "InferenceFunction": "MyTimesFM.py",
    "ModelType": "TimeSeriesForecasting"

}

Файл .emd должен содержать следующие ключи:

  • InferenceFunction — имя файла, содержащего пользовательскую функцию временных рядов
  • ModelType — определяет тип модели, задано TimeSeriesForecasting

Пользовательский файл .dlpk

Чтобы завершить окончательную стороннюю пользовательскую модель временных рядов, создайте файл модели .dlpk. Файл .dlpk позволяет использовать эту модель с инструментом Прогнозирование с помощью модели временных рядов в Группе инструментов Временные ряды ИИ.

Организуйте файлы следующим образом:

  • Создайте папку и включите в нее файл пользовательской функции временных рядов (например, MyTimesFM.py) и файл Esri .emd (например, TimesFM.emd). Имя папки должно совпадать с именем файла .emd.
    
    TimesFM/
    ├── MyTimesFM.py
    └── TimesFM.emd
    Включите любые дополнительные файлы или папки, необходимые для функции временных рядов.
  • Выполните сжатие папки в архив ZIP. Переименуйте файл .zip по имени файла .emd, но с расширением .dlpk. Файл .dlpk теперь готов к использованию в инструменте Прогнозирование с помощью модели временных рядов.