Прогнозирующие запросы (интеллектуальный анализ данных)

Применимо к: SQL Server 2019 и более ранних версий Analysis Services Azure Analysis Services Fabric/Power BI Premium

Важно!

Интеллектуальный анализ данных не рекомендуется использовать в службах SQL Server 2017 Analysis Services, а в SQL Server 2022 Analysis Services его поддержка прекращена. Документация не обновляется для устаревших и неподдерживаемых функций. Дополнительные сведения см. в статье об обратной совместимости служб Analysis Services.

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

С точки зрения практики в SQL Server поддерживаются разные типы прогнозирующих запросов, в зависимости от типа входных данных запроса.

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

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

Существующую модель можно расширить путем добавления новых данных в составе запроса и осуществлять прогнозы на основе составных рядов.

Можно применить существующую модель к новому ряду данных с помощью параметра REPLACE_MODEL_CASES.

Можно выполнять перекрестные прогнозы.

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

Базовая конструкция прогнозирующих запросов

Работа с результатами запросов

Конструирование простого прогнозирующего запроса

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

  • В пакетном прогнозирующем запросе модель сопоставляется с существующими данными с помощью прогнозируемого соединения.

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

Для определения новых данных и в одноэлементных и в пакетных прогнозирующих запросах используется синтаксис PREDICTION JOIN. Отличаются они способом указания входной части прогнозируемого соединения.

  • В пакетном прогнозирующем запросе данные поступают из внешнего источника данных, задаваемого конструкцией OPENQUERY.

  • В одноэлементном прогнозирующем запросе данные передаются встроенными как часть запроса.

Для моделей временных рядов входные данные требуются не всегда. Прогнозы можно строить с помощью данных, которые уже есть в модели. Однако, если все же заданы новые входные данные, необходимо решить, будет ли использоваться обновление новых данных с расширением модели, или будут заменяться исходные ряды данных, использовавшиеся в модели. Дополнительные сведения об этих параметрах см. в разделе Time Series Model Query Examples.

Добавление прогнозирующих функций

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

Для этого добавьте прогнозирующие функции в запрос. Каждый тип модели или запроса поддерживает конкретные функции. Например, в моделях кластеризации поддерживаются особые прогнозирующие функции, предоставляющие дополнительные сведения о созданных в модели кластерах, тогда как модели временных рядов содержат функции, вычисляющие разницу между определенными моментами времени. Существуют также общие прогнозирующие функции, работающие почти для всех типов моделей. Список функций прогнозирования, поддерживаемых в различных типах запросов, см. в этой статье справочника по расширению расширений интеллектуального анализа данных: Общие функции прогнозирования (DMX).

Создание одноэлементных прогнозирующих запросов

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

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

Предупреждение

Несмотря на имя, одноэлементные прогнозирующие запросы не просто делают одиночные прогнозы. Вы можете создавать несколько прогнозов для каждого набора входных данных. Несколько входных вариантов передаются путем создания инструкции SELECT для каждого из них с последующим объединением этих вариантов с помощью оператора UNION.

При создании одноэлементного прогнозирующего запроса нужно предоставить модели новые данные в виде PREDICTION JOIN (прогнозируемого соединения). Это означает, что, даже если сопоставление с существующей таблицей не производится, нужно убедиться, что новые данные соответствуют существующим столбцам модели интеллектуального анализа данных. Если новые столбцы данных и новые данные точно совпадают, SQL Server Analysis Services сопоставит столбцы. Такое прогнозирующее соединение называется естественным ( NATURAL PREDICTION JOIN). Однако если столбцы не совпадают или новые данные не имеют такого же типа и объема, как данные модели, то необходимо задать соответствие столбцов модели новым данным или указать, какие данные отсутствуют.

Пакетные прогнозирующие запросы

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

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

Чтобы получить наилучший результат, нужно соединить как можно больше совпадающих столбцов данных со столбцами модели. Однако запрос завершится успешно, даже если вообще не указать сопоставлений. Если столбцы данных не соединить со столбцами модели, результатом запроса будет граничный прогноз, эквивалентный инструкции SELECT <predictable-column> FROM <model> без предложения PREDICTION JOIN.

После успешного сопоставления всех соответствующих столбцов выполняется запрос и SQL Server Analysis Services делает прогнозы для каждой строки в новых данных на основе шаблонов в модели. Вы можете сохранить результаты обратно в новую таблицу в представлении источника данных, которая содержит внешние данные, или скопировать и вставить данные, если вы используете SQL Server Data Tools или SQL Server Management Studio.

Предупреждение

Если вы используете конструктор в SQL Server Data Tools, внешний источник данных сначала должен быть определен как представление источника данных.

если для создания прогнозируемого соединения используются расширения интеллектуального анализа данных, внешний источник данных можно задать одной из следующих команд: OPENQUERY, OPENROWSET или SHAPE. По умолчанию для доступа к данным в шаблонах расширений интеллектуального анализа данных используется команда OPENQUERY. Сведения об этих методах см. в статье <Исходный запрос> данных.

Прогнозы для моделей временных рядов

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

  • Увеличение количества обучающих вариантов модели означает, что в существующие ряды данных модели временных рядов добавляются новые данные. Исходя из этого прогнозы основываются на новых, объединенных рядах. Этот вариант удобен, если требуется просто добавить несколько точек данных в существующую модель.

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

  • Замена обучающих вариантов модели означает, что обученная модель сохраняется, но ее базовые варианты заменяются новыми данными. Этот вариант полезен, если требуется сохранить тренд в модели и применить его к другому набору данных.

    Например, исходная модель могла быть обучена на наборе данных с очень высокими объемами продаж. При замене базовых данных новыми рядами (скажем, из магазина, объем продаж которого ниже) вы сохраняете тренд, но прогнозы начинаются со значений из новых рядов.

При любом из этих подходов начальной точкой прогноза всегда будет конец исходной последовательности.

Дополнительные сведения о создании прогнозирующих соединений в моделях временных рядов см. в разделах Примеры запросов модели временных рядов или PredictTimeSeries (DMX).

Работа с результатами прогнозирующего запроса

Варианты сохранения результатов прогнозирующего запроса интеллектуального анализа данных различаются в зависимости от способа создания запроса.

  • При создании запроса с помощью построителя прогнозирующих запросов в SQL Server Management Studio или SQL Server Data Tools результаты прогнозирующего запроса можно сохранить в существующем источнике данных SQL Server Analysis Services. Дополнительные сведения см. в разделе Просмотр и сохранение результатов прогнозирующего запроса.

  • При создании прогнозирующих запросов с помощью расширений интеллектуального анализа данных в области запросов SQL Server Management Studio можно использовать параметры вывода запроса, чтобы сохранить результаты в файле или в области Результаты запроса в виде текста или сетки. Дополнительные сведения см. в статье Редакторы запросов и текста (SQL Server Management Studio)..

  • При запуске прогнозирующего запроса с помощью компонентов служб Integration Services, задачи позволяют записывать результаты в базу данных с помощью доступного диспетчера соединений ADO.NET или OLEDB. Дополнительные сведения см. в статье Data Mining Query Task.

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

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

SELECT  
  PredictTimeSeries([Forecasting].[Amount]) as [PredictedAmount]  
, PredictTimeSeries([Forecasting].[Quantity]) as [PredictedQty]  
FROM  
  [Forecasting]  
  

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

PredictedAmount

$TIME Сумма
201101 172067.11
$TIME Сумма
201102 363390.68

PredictedQty

$TIME Количество
201101 77
$TIME Количество
201102 260

Если данный поставщик не может обрабатывать иерархические наборы строк, то результаты можно перевести в плоский формат, добавив в прогнозирующий запрос ключевое слово FLATTEN. Дополнительные сведения, включая примеры плоских наборов строк, см. в разделе SELECT (DMX).

См. также:

Запросы содержимого (интеллектуальный анализ данных)
Запросы, определяющие данные (интеллектуальный анализ данных)