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

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

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

UPD.
Попробую все-таки чуть конкретизировать задачу. А то возникает ощущение, что недостаточно подробно донес суть.

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

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

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

Комментарии (20)


  1. Iora
    27.01.2017 13:13

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


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


    1. Rupper
      27.01.2017 13:15

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

      Но логику Вы поняли правильно.


      1. Iora
        27.01.2017 13:26

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

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

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


        1. Rupper
          27.01.2017 14:16

          Я же сказал — неизвестно, какие действия недобросовестные.

          Есть миллион всяких параметров. Надо каким-то образом определить значимые.


  1. yusman
    27.01.2017 15:45

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

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

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


  1. labboss
    27.01.2017 16:28

    Необходимо понять что такое «деятельность» для бухгалтеров это одно, для разработчиков другое. нужно попытаться описать это свойствами\атрибутам\фичами. кластеризовать найти аномалии…


    1. Rupper
      27.01.2017 16:29

      Конечно, у разных ролей деятельность разная. Но у пользователей одной роли — одинаковая (в каком-то смысле).


  1. labboss
    27.01.2017 16:40

    На вопрос не отвечаете:-) что есть целевая переменная? кажется разумным что нужно смотреть на что человек тратит время.


    1. Rupper
      27.01.2017 17:30

      Я же честно говорю, что мы не знаем как ответить на этот вопрос. И определение метода как на него ответить есть часть задачи.


  1. Rupper
    27.01.2017 19:11

    Попробую все-таки чуть конкретизировать задачу. А то возникает ощущение, что недостаточно подробно донес суть.

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

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

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


  1. andreyverbin
    28.01.2017 11:58

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


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

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

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


  1. labboss
    28.01.2017 12:15

    значит получается что деятельность менеджера мы можем описать заказами и отказами и наверно чем-то ещё. все это рассчитываем. получается какое-то nмерное пространство


    1. Rupper
      29.01.2017 09:14

      Ок, и что делаем дальше? Какая метрка этого пространства?


      1. labboss
        29.01.2017 11:56

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


      1. andreyverbin
        30.01.2017 00:06

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


    1. andreyverbin
      30.01.2017 00:02

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

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

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


      1. Rupper
        30.01.2017 11:32

        Андрей, а Вы можете это сформулировать в виде строгих алгоритмов, а не идей?


        1. andreyverbin
          30.01.2017 14:27

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

          Вопросы о данных
          — А они есть в наличии?
          — Данные размечены? Например данные о продавце и флажок «хороший/плохой».
          — Насколько данные зашумлены? Пропуски значений, ошибки ввода, bias оценок от разных людей (как в фильмах, кто-то всегда ставит хорошо, а у кого-то 3 звезды == 5 звезд)


        1. djVano
          31.01.2017 00:31

          Обратите внимание на существующие 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-й колонке что нить оформить, как раньше?)


  1. labboss
    30.01.2017 12:13

    моя идея как раз была в том чтобы кластеризовав найти тех кто отделяется от общей массы. ну т.е. если 99.999%% у которых 10 заказов и 10 отказов а у 0.0001 отказов больше — вот этих и надо искать. не очень понимаю как уменьшение размерности поможет нам.