Pull to refresh

Comments 20

Задача усложняется тем, что мы не знаем, какая деятельность вредная. Но знаем, что у большинства пользователей она нормальная.


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

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

какие параметры надо учитывать для определения поведения? Как их найти?

А какие действия указывают на недобросовестность человека? Если они известны, то отсюда стоит начать. Если неизвестны, то анализировать все метрики и характеристики, которые можно получить и искать тех, кто отличается от основной массы.
Я же сказал — неизвестно, какие действия недобросовестные.

Есть миллион всяких параметров. Надо каким-то образом определить значимые.
Похоже вы путаете «статистику» и «расследование фактов».
Идентификация базируется уже на каких то исследованных фактах, например, вы уже нашли мошенников и зафиксировали их. И далее:
1. скормили машине,
2. обучили ее,
3. она нашла кореляции фактов мошенничества с какими то другими показателями.
4. Применяете полученную модель для дальнейших поисков мошенничества.

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

Боюсь, что ваша задача не решается через чистый ML в текущей ее постановке.

Необходимо понять что такое «деятельность» для бухгалтеров это одно, для разработчиков другое. нужно попытаться описать это свойствами\атрибутам\фичами. кластеризовать найти аномалии…
Конечно, у разных ролей деятельность разная. Но у пользователей одной роли — одинаковая (в каком-то смысле).
На вопрос не отвечаете:-) что есть целевая переменная? кажется разумным что нужно смотреть на что человек тратит время.
Я же честно говорю, что мы не знаем как ответить на этот вопрос. И определение метода как на него ответить есть часть задачи.
Попробую все-таки чуть конкретизировать задачу. А то возникает ощущение, что недостаточно подробно донес суть.

Итак, есть IEM-система. Это следующее поколение развития систем автоматизации предприятия. И для текущей задачи можно считать, что это просто свежая ERP система, в которой все данные о предприятии согласованы, достоверны, лежат в единой базе в структурированном виде и т.д. и т.п.

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

Необходимо решить задачу выделения значимых параметров, построения гипотез, расчета и поиска соответствующих моделей. Как пример можно приводить менеджеров по продажам. Их 1000 человек, и все делают примерно одинаковые операции. Но кто-то (возможно) делает что-то не так как остальные.
Можно, конечно, пытаться искать например тех, у кого больше возвратов в гарантию, или маленькая рентабельность. Можно опускаться до уровня отдельных операций — продаж, закупок перемещений и рассматривать параметры этих отдельных операций.
Но хочется попробовать сделать схему, при которой будет сформулирован алгоритм который позволит выявить значимые параметры (или определить, что таких нет), и далее найти метод нахождения «подозреваемых» которые чем-то отличаются.
Какие методы тут использовать — вопрос к специалистам по ML, матстатистике и прочим нейросеткам.
И собственно за это мы готовы платить.
Но хочется попробовать сделать схему, при которой будет сформулирован алгоритм который позволит выявить значимые параметры (или определить, что таких нет), и далее найти метод нахождения «подозреваемых» которые чем-то отличаются.


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

Какие методы тут использовать — вопрос к специалистам по ML, матстатистике и прочим нейросеткам.

Думаю вам надо пробовать разные методы и смотреть, что работает лучше. Все от данных зависит в конце концов, может даже выяснится, что на данных от разных организаций работают разные методы. Если бы меня попросили что-то подобное исследовать, я бы начал с PCA, затем деревья решений, затем нейронки.
значит получается что деятельность менеджера мы можем описать заказами и отказами и наверно чем-то ещё. все это рассчитываем. получается какое-то nмерное пространство
Ок, и что делаем дальше? Какая метрка этого пространства?

Потом мы их кластеризуем и посмотрим, а кто же отличается от общей массы.

В этом и состоит задача — отыскать такую метрику, которая бы хорошо разделяла «правильных» и «неправильных» менеджеров. Кстати, может оказаться, что одной метрики мало и в разных частях пространства лучше работают разные метрики (это будет значит, что имеем дело с многообразием менеджеров)
В принципе так и есть. PCA, например, часто используется чтобы выяснить какие параметры важные, а какие нет. В этом, как правило, основная загвоздка, потому что если заранее знать, что «менеджера можно описать заказами и отказами», то задача можно сказать уже решена.

Положим наш менеджер это n-мерный вектор, а мы хотим рассчитать какую-то характеристику, например «F(менеджер) = {плохой, хороший}». Еще предположим, что в данном векторе есть вся необходимая информация для рассвета нашей характеристики. Эта характеристика, в некоторой окрестности, приближается линейной комбинацией координат вектора-менеджера. Далее разбиваем все пространство на участки где лучше работает те или иные коэффициенты и вуаля.

Возможные проблемы
— что-то важное не попало в вектор менеджера (так скорее всего и будет если выбирать важные характеристики «на глазок»)
— может случится, что линейная комбинация приближает менеджера хорошо только на очень небольшом участке
Андрей, а Вы можете это сформулировать в виде строгих алгоритмов, а не идей?
Все компоненты (PCA, деревья, нейронки и прочеее) уже есть готовые, например в numpy/scipy. Самого алгоритма, в смысле последовательности шагов и конкретных настроек, пока конечно нет, только общие идеи. Алгоритм может появиться только после работы с реальными данными. Не глядя на них можно бесконечно теоретизировать, что то, или иное решение будет работать или нет.

Вопросы о данных
— А они есть в наличии?
— Данные размечены? Например данные о продавце и флажок «хороший/плохой».
— Насколько данные зашумлены? Пропуски значений, ошибки ввода, bias оценок от разных людей (как в фильмах, кто-то всегда ставит хорошо, а у кого-то 3 звезды == 5 звезд)
Обратите внимание на существующие API это будет дешевле для MVP проекта и/или валидации решения. Вот например https://www.ibm.com/watson/developercloud/ Watson from IBM.

По поводу конкретных идей поведения можно решить напмример такие задачи:
1) По логам составить текст описывающий поведение рассматривамой сущности. Скормить его https://alchemy-language-demo.mybluemix.net/ и получить результат.

Например написать запросы которые дают оценку пользователя.
— He was one of the slowest person who created the order
select a, b from (
  select     a,b,    rank() over (order by b) r  from    top_n_test
  )
where
  r<10


— The one who made one of the biggest order today
— He put relatively big comments for the order
— He was never late/early at work
— He took too many breaks over the period

2) Относительно персонала

Использовать Personality Insights предварительно переведя с русского.
https://www.ibm.com/watson/developercloud/personality-insights.html

Вложить еще логи чата работников, е-мейлов :)

BTW Есть возможность, что нить по 4-й или 5-й колонке что нить оформить, как раньше?)
моя идея как раз была в том чтобы кластеризовав найти тех кто отделяется от общей массы. ну т.е. если 99.999%% у которых 10 заказов и 10 отказов а у 0.0001 отказов больше — вот этих и надо искать. не очень понимаю как уменьшение размерности поможет нам.
Only those users with full accounts are able to leave comments. Log in, please.