serge_gorshkov


Сергей Горшков - о бизнесе в сфере ИТ

о семантической интеграции, программировании, управлении...


Previous Entry Share Next Entry
Человек, неудовлетворенный желудочно: моделируем потребителя
serge_gorshkov
Выбрали пирожное? Мы посоветуем вам напиток!

Дошли руки выложить на обозрение еще один пример использования семантических вычислений - генератор персональных рекомендаций. Это алгоритм, решающий супер-актуальную для маркетологов всех мастей задачу - стимулирование сопутствующих продаж (collateral sales). С подобными штуками сталкивался, наверное, каждый, кто покупал что-нибудь в интернет-магазине. Покупаешь телефон - к нему предлагают чехол и пленку. Купил коляску - при следующем входе на сайт предложат памперсы.

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

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

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

Все перечисленное у нас есть, воплощено в коде, и в качестве очень-очень простой демонстрации доступно по ссылке, с которой начинается этот пост.

Разумеется, применять подобные вещи можно не только для генерации рекомендаций потребителям (при словах "модель потребителя" неизбежно вспоминаются эксперименты профессора Выбегалло, вынесенные в заголовок поста). Точно такой же алгоритм, без малейших изменений в программном коде, можно применять в системах поддержки принятия решений любого рода. Я говорю о настоящих системах принятия решений, которые действительно способны сделать за человека часть выводов, а не просто предоставить ему необходимую информацию для анализа (часто "системами поддержки принятия решений" называют различные софты, которые представляют реальность в виде наборов чисел, и пытаются на них что-то обсчитать - об ущербности подобной аналитики я уже высказывался).

  • 1
Потестировала. С моими вкусами тирамису придется есть всухомятку (множество рекомендованных напитков получилось пусто). :)

какую-то чушь рекомендует

Мы НЕ рекомендуем:

Эспрессо (Тем, кто не любит сладкое, не понравятся слишком сладкие пирожные)
Латте (Тем, кто не любит сладкое, не понравятся слишком сладкие пирожные)
Капуччино (Тем, кто не любит сладкое, не понравятся слишком сладкие пирожные)

Это что было, простите? Кто тут слишком сладкий, Эспрессо? А пирожные при чем?

Не удалось оценить, что у вас там с семантикой, но примеры какие-то совершенно сырые.

Re: какую-то чушь рекомендует

Исправил модель, теперь нормально показывает.
Конечно, там была опечатка ("пирожные" вместо "напитки"), и у эспрессо была проблема с составом - слишком сладкий получился.
Спасибо за тест.

Но с моей непрофессиональной точки зрения модель все равно странная :)

Похоже тут в модели заложено, что Латте Макиато напиток несладкий, а просто Латте и Купуччино - сладкие. Что в общем-то не совсем верно. Они одинаковые по составу, а сахар можно добавить в любой из них. То есть "сладкий" - это вообще не свойство этих напитков самих по себе.

И еще - было бы интересно посмотреть, а откуда собственно берутся рекомендации. В реальной жизни для больших наборов правил это часто бывает нужно. Или вот этот текст: "(Тем, кто не любит сладкое, не понравятся слишком сладкие ...)" и есть то что мне хочется?

Насчет сладости напитков согласен. То, что я показал - демонстрационный прототип, он вычисляет сладость напитка как одну цифру (она складывается из степени сладости каждого его ингредиента, помноженной на долю этого ингредиента в конечном продукте), хоть я и сам воюю с таким подходом :) Повторюсь, это прототип, и он должен быть простым, чтобы быть понятным. Так вот, все напитки со сладостью выше N1 (значение, заложенное при создании правила), считаются "сладкими".

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

Текст типа "Тем, кто не любит сладкое..." - это название правила, которое сработало в данном случае. Опять же, ради прототипа, правил заложено всего 10, а на практике их может быть очень много. Оно выводится, да, для того, чтобы обосновать принятое системой решение.
В техническом смысле правило представляет собой логическое уравнение примерно такого вида: "Пусть Y - это напиток; если степень сладости Y больше чем N1, то не рекомендуем его". Это простое правило, потому что оно не учитывает свойства пирожного. А большинство правил в прототипе выглядят примерно так: "Пусть X - это пирожное, а Y - напиток; Если X содержит ингредиент "ваниль", а Y имеет степень кислоты больше чем N1, то..." (пример совершенно условный, я показываю структуру). Такие правила задаются в специальном интерфейсе-конструкторе.

  • 1
?

Log in

No account? Create an account