Примеры запросов к модели кластеризации последовательностей

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

Важно!

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

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

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

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

Запросы содержимого

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

Получение списка последовательностей для состояния

Использование системных хранимых процедур

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

Прогноз следующего состояния или состояний

Поиск сведений о модели кластеризации последовательностей

Для создания осмысленных запросов к содержимому модели интеллектуального анализа данных необходимо понимать структуру содержимого модели и знать, какие сведения содержатся в узле каждого типа. Дополнительные сведения см. в статье Содержимое модели интеллектуального анализа данных для моделей кластеризации последовательностей (службы Analysis Services — интеллектуальный анализ данных).

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

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

Следующий запрос возвращает параметры, которые использовались для построения и обучения модели, [Sequence Clustering]. Эта модель создается в ходе занятия 5 учебника Basic Data Mining Tutorial.

SELECT MINING_PARAMETERS   
from $system.DMSCHEMA_MINING_MODELS  
WHERE MODEL_NAME = 'Sequence Clustering'  

Пример результатов:

MINING_PARAMETERS
CLUSTER_COUNT=15,MINIMUM_SUPPORT=10,MAXIMUM_STATES=100,MAXIMUM_SEQUENCE_STATES=64

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

Как это отличается от случая, когда алгоритму позволяют определить наилучшее количество кластеров? В качестве эксперимента можно создать другую модель кластеризации на основе тех же данных, но задать для параметра CLUSTER_COUNT значение 0. Если это сделать, алгоритм обнаружит 32 кластера. Значит, используя для параметра CLUSTER_COUNT значение по умолчанию, 10, можно ограничить количество результатов.

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

Пример запроса 2. Получение списка последовательностей для состояния

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

Например, следующий запрос возвращает полный список первых состояний модели до группирования последовательностей в кластеры. Этот список можно получить, вернув список последовательностей (NODE_TYPE = 13), родителем которых является корневой узел модели (PARENT_UNIQUE_NAME = 0). Применение ключевого слова FLATTENED позволяет облегчить чтение результатов.

Примечание

Имена столбцов (PARENT_UNIQUE_NAME, Support и Probability) необходимо заключать в скобки, чтобы они отличались от одноименных зарезервированных ключевых слов.

SELECT FLATTENED NODE_UNIQUE_NAME,  
(SELECT ATTRIBUTE_VALUE AS [Product 1],  
[Support] AS [Sequence Support],   
[Probability] AS [Sequence Probability]  
FROM NODE_DISTRIBUTION) AS t  
FROM [Sequence Clustering].CONTENT  
WHERE NODE_TYPE = 13  
AND [PARENT_UNIQUE_NAME] = 0  

Частичные результаты:

NODE_UNIQUE_NAME Product 1 Мощность несущего множества последовательности Вероятность последовательности
1081327 Missing 0 #######
1081327 Универсальная подставка для велосипеда 17 0,00111
1081327 Мойка велосипедная 64 0,00418
1081327 (строки с 4 по 36 пропущены)
1081327 Женские шорты Mountain 506 0,03307

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

Например, в результатах предыдущего запроса продукт «Женские шорты Mountain» имеет в модели номер последовательности 37. Эту информацию можно использовать для просмотра всех продуктов, которые когда-либо были куплены после продукта «Женские шорты Mountain».

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

SELECT NODE_UNIQUE_NAME  
FROM [Sequence Clustering].CONTENT  
WHERE NODE_DESCRIPTION = 'Transition row for sequence state 37'  
AND [PARENT_UNIQUE_NAME] = '1081327'  

Пример результатов:

NODE_UNIQUE_NAME
1081365

Узел, представленный этим идентификатором, содержит список всех последовательностей, следующих за продуктом «Женские шорты Mountain», а также мощности их несущих множеств и вероятности.

SELECT FLATTENED  
(SELECT ATTRIBUTE_VALUE AS Product2,  
[Support] AS [P2 Support],  
[Probability] AS [P2 Probability]  
FROM NODE_DISTRIBUTION) AS t  
FROM [Sequence Clustering].CONTENT  
WHERE NODE_UNIQUE_NAME = '1081365'  

Пример результатов:

t.Product2 t.P2 Support t.P2 Probability
Missing 230,7419 0,456012
Classic Vest 8,16129 0,016129
Велосипедная шапочка 60,83871 0,120235
Half-Finger Gloves 30,41935 0,060117
Кофта с длинными рукавами и эмблемой 86,80645 0,171554
Racing Socks 28,93548 0,057185
Short-Sleeve Classic Jersey 60,09677 0,118768

Следует заметить, что мощность несущего множества для различных последовательностей, связанных с продуктом «Women's Mountain Shorts», в данной модели равна 506. Сумма мощностей множества значений для перехода также равна 506. Однако эти числа не целые, что кажется довольно странным, поскольку мощность множества интуитивно представляется просто как количество вариантов, содержащих каждый переход. Однако метод создания кластеров учитывает частичное членство. Поэтому вероятность каждого перехода в кластере должна взвешиваться с помощью вероятности принадлежности к данному конкретному кластеру.

Допустим, кластеров четыре. Конкретная последовательность с вероятностью 40 % принадлежит к кластеру 1, с вероятностью 30 % — к кластеру 2, с вероятностью 20 % — к кластеру 3 и с вероятностью 10 % — к кластеру 4. После того как алгоритм определил кластер, которому, скорее всего, принадлежит данный переход, он взвешивает вероятности внутри кластера по априорной вероятности кластера.

Пример запроса 3. Использование системных хранимых процедур

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

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

Примечание

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

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

Профили кластеров и образцы вариантов

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

  • GetClusterProfile возвращает характеристики кластера и всю информацию, которую можно найти в таблице NODE_DISTRIBUTION для данного кластера.

  • GetNodeGraph возвращает узлы и ребра, которые можно использовать для создания математического представления кластеров в качестве диаграммы, подобной той, которая представлена на первой вкладке представления «Кластеризация последовательностей». Узлы представляют собой кластеры, а ребра — веса или интенсивность.

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

CALL System.Microsoft.AnalysisServices.System.DataMining.Clustering.GetClusterProfiles('Sequence Clustering', 2147483647, 0)

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

CALL System.Microsoft.AnalysisServices.System.DataMining.Clustering.GetNodeGraph('Sequence Clustering','12',0)  

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

CALL System.Microsoft.AnalysisServices.System.DataMining.Clustering.GetNodeGraph('Sequence Clustering','',0)  

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

SELECT * FROM [Sequence Clustering].SAMPLE_CASES WHERE IsInNode('12')  

Дополнительные сведения см. в разделе МОДЕЛЬ SELECT FROM<>. SAMPLE_CASES (расширений интеллектуального анализа данных).

Характеристики кластера и сравнение кластеров

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

В следующих примерах используется системная хранимая процедура, GetClusterCharacteristics, для возвращения всех характеристик кластера Cluster 12, оценка вероятности которых превышает заданное пороговое значение 0,0005.

CALL System.Microsoft.AnalysisServices.System.DataMining.Clustering.GetClusterCharacteristics('Sequence Clustering','12',0.0005)  

Чтобы вернуть характеристики всех кластеров, нужно оставить значение идентификатора кластера пустым.

CALL System.Microsoft.AnalysisServices.System.DataMining.Clustering.GetClusterCharacteristics('Sequence Clustering','',0.0005)  

В следующем примере системная хранимая процедура GetClusterDiscrimination вызывается для сравнения характеристик кластеров Cluster 1 и Cluster 12.

CALL System.Microsoft.AnalysisServices.System.DataMining.Clustering.GetClusterDiscrimination('Sequence Clustering','1','12',0.0005,true)  

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

Переходы и состояния

Вкладка Переходы состояния окна «Алгоритм кластеризации последовательностей (Майкрософт)» выполняет сложные запросы на серверной стороне для получения и сравнения статистических характеристик различных кластеров. Для воспроизведения этих результатов нужен более сложный запрос и некоторая обработка на клиенте.

Однако для получения вероятностей и состояний для последовательностей или индивидуальных переходов можно воспользоваться DMX-запросами, описанными в примере 2 данного раздела, Запросы содержимого.

Создание прогнозов с помощью модели

Прогнозирующие запросы к модели кластеризации последовательностей используют многие прогнозирующие функции, используемые и с другими моделями кластеризации. Кроме того, вы можете использовать специальную функцию прогнозирования PredictSequence (DMX) для создания рекомендаций или прогнозирования следующих состояний.

Пример запроса 4. Прогноз следующего состояния или состояний

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

Следующий образец запроса представляет собой одноэлементный прогнозирующий запрос, возвращающий пять наиболее вероятных прогнозов вместе с их вероятностями. Поскольку модель включает в себя вложенную таблицу, при прогнозах нужно использовать вложенную таблицу [v Assoc Seq Line Items]как ссылку на столбец. Кроме того, при передаче входных значений нужно сформировать соединение таблицы вариантов и столбцов вложенной таблицы, как показано во вложенной инструкции SELECT.

SELECT FLATTENED PredictSequence([v Assoc Seq Line Items], 7)  
FROM [Sequence Clustering]  
NATURAL PREDICTION JOIN  
(SELECT  (SELECT 1 as [Line Number],  
   'All-Purpose Bike Stand' as [Model]) AS [v Assoc Seq Line Items])   
AS t  

Пример результатов:

Expression.$Sequence Expression.Line Number Expression.Model
1 Велосипедная шапочка
2 Велосипедная шапочка
3 Sport-100
4 Кофта с длинными рукавами и эмблемой
5 Half-Finger Gloves
6 Универсальная подставка для велосипеда
7 Универсальная подставка для велосипеда

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

Столбец $sequence — это столбец, возвращаемый по умолчанию функцией PredictSequence для упорядочивания результатов прогноза. Столбец [Line Number]нужен для сопоставления ключей последовательностей в модели, но ключи не выводятся.

Интересно заметить, что после последовательности «Универсальная подставка для велосипеда» двумя наиболее вероятными спрогнозированными последовательностями являются «Велосипедная шапочка» и «Велосипедная шапочка». Это не ошибка. В зависимости от представления данных покупателю и их группирования при обучении модели появление таких последовательностей вполне вероятно. Например, покупатель мог приобрести одну велосипедную шапочку (красную), а затем другую (синюю), или приобрести две шапочки одну за другой, если система продаж не позволяет задавать количество.

Значения в строках 6 и 7 представляют собой заполнители. При достижении конца цепочки возможных переходов результаты прогнозирования не прекращаются, но значение, переданное в качестве входного, прибавляется к результатам. Например, если увеличить число прогнозов до 20, в строках с 6 по 20 будет содержаться одно и то же значение, «Универсальная подставка для велосипеда».

Список функций

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

прогнозирующую функцию Использование
Cluster (расширения интеллектуального анализа данных) Возвращает кластер, в котором с наибольшей вероятностью содержится входной вариант.
ClusterDistance (расширения интеллектуального анализа данных) Возвращает расстояние до входного варианта от указанного кластера, а если кластер не указан, то расстояние до входного варианта от наиболее вероятного кластера.

Эту функцию можно использовать с любой моделью кластеризации (максимизация ожиданий, K-среднее и т. д.), но полученные результаты будут зависеть от алгоритма.
ClusterProbability (расширения интеллектуального анализа данных) Возвращает вероятность того, что входной вариант принадлежит определенному кластеру.
IsInNode (расширения интеллектуального анализа данных) Указывает, содержит ли заданный узел текущий вариант.
PredictAdjustedProbability (расширения интеллектуального анализа данных) Возвращает настроенную вероятность указанного состояния.
PredictAssociation (расширения интеллектуального анализа данных) Прогнозирует ассоциированное членство.
PredictCaseLikelihood (расширения интеллектуального анализа данных) Возвращает достоверность, с которой входной вариант соответствует существующей модели.
PredictHistogram (расширения интеллектуального анализа данных) Возвращает таблицу, представляющую гистограмму прогноза данного столбца.
PredictNodeId (расширения интеллектуального анализа данных) Возвращает значение параметра Node_ID узла, к которому относится вариант.
PredictProbability (расширения интеллектуального анализа данных) Возвращает вероятность для указанного состояния.
PredictSequence (расширения интеллектуального анализа данных) Дает предварительную оценку будущих значений заданной последовательности данных.
PredictStdev (расширения интеллектуального анализа данных) Возвращает прогнозируемое среднеквадратичное отклонение для заданного столбца.
PredictSupport (расширения интеллектуального анализа данных) Возвращает опорное значение для указанного состояния.
PredictVariance (расширения интеллектуального анализа данных) Возвращает дисперсию указанного столбца.

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

См. также:

Запросы интеллектуального анализа данных
Технический справочник по алгоритму кластеризации последовательностей (Майкрософт)
Алгоритм кластеризации последовательностей (Майкрософт)
Содержимое моделей интеллектуального анализа данных для моделей кластеризации последовательностей (службы Analysis Services — интеллектуальный анализ данных)