- PVSM.RU - https://www.pvsm.ru -
Сегодня, когда во всех деревнях и сёлах идёт [1] нейрореволюция, мы всё больше убеждаемся, что нейросети — это чистая магия и манна-небесная. Их стали использовать везде и всюду [2], и даже встроили в Excel [3]. Неявно, при виде сложной задачи многим представляется следующая картина:
И сегодня мы займёмся совмещением приятного с полезным: разберём интересную (практическую) аналитическую задачу и заодно проанализируем ряд факторов, определяющих (не-)применимость нейронных сетей к аналитическим задачам.
Представьте, вы работаете аналитиком в какой-нибудь компании, которой важен её облик на Хабре (условно назовём её Почта.com). И тут к вам приходит девушка из PR-отдела и говорит: "Мы с менеджерами определили в качестве важного KPI нашего бренда Хабра-рейтинг компании. У нас есть бюджет и мы хотим понять, как его распределить, чтобы максимизировать Хабра-индекс. Нам нужно, чтобы ты определил ключевые факторы, которые на него влияют и вывел наиболее разумную стратегию. Попробуй там какие-нибудь нейросети".
Во время этой речи у вас начинает дергаться глаз, но спустя пару минут составляете список вопросов для анализа:
Структура статьи
Изначальный комментарий:
И ответ (отсюда [20]):
Вообще, серьёзность подхода видна уже по презентациям компании [21] на тему:
Если взглянуть на профиль компании, то в глаза бросаются следующие возможные кандидаты:
[22]
Причем параметры могут состоять из целой группы переменных: карма и рейтинг сотрудников, количество просмотров, избранного, плюсов у статей, а также их количество, etc.
И тут самый интересный момент: feature construction, а что собственно является фактором определяющим Хабра-индекс? И почему это столь важно? Например, чтобы алгоритм машинного обучения "выучил" настоящую исходную функцию, нужно чтобы исходная функция была определена в правильном пространстве, которого у нас нет!
В некотором смысле это порочный круг — нужно знать, что пространство (или подпространство) содержит ключевые факторы, чтобы восстановить зависимость. Но в данной ситуации, если известны ключевые факторы (или их надмножество), то задача фактически решена.
Чуть более формально, это можно описать так: локальные закономерности присутствуют в нашем представлении данных, то есть у нас "верное представление" всех параметров функции, которую мы хотим выучить. Если настоящая функция f(X,Y,Z), а в нашем представлении есть только X и Y, то мы ищем функцию в заведомо неверном классе F(X,Y), не учитывающем Z. Этим реальные задачи существенно отличаются от Kaggle [23], нам ничего не дано.
Как определить, что фактор важен? Мы знаем, что зависимость детерминированная, то есть есть некоторая аналитическая функция, по которой ТМ однозначно считает индекс. Обозначим, функцию индекса за f, тогда f зависит от фактора xi, тогда и только тогда когда для любых xi верно что:
[24]
и с мы будем называть величиной эффекта.
Данное определение не предполагает независимости между переменными. Если переменные зависимы, значит, что c для i-го фактора может меняться в зависимости от остальных переменных.
Также мы знаем, из нашего опыта, что функция обязана удовлетворять граничному условию:
Важный момент: интеграция сильных априорных представлений о том, какой должна быть функция в нейронные сети — задача совершенно нетривиальная.
Таким образом ключевое наблюдение в вопросе Q1: необходимо адекватным образом трансформировать данные из профиля компании (например, перечисленные выше) и произвести замер эффекта, по одному удаляя искажающие факторы (confounding variables). Также необходимо будет проверить условие факторизации, то есть, что переменные независимы друг от друга:
Отправляемся по адресу: https://habrahabr.ru/companies/ [27] на самую последнюю страницу и видим, ценнейший материал:
[28]
Это набор компаний, с нулём публикаций и небольшим числом сотрудников (один-два) и небольшим числом подписчиков. Выбрав две компании — xPrecision и Покет ДС с одинаковым числом сотрудников и разницей в одного подписчика, мы нашли ненулевую разницу в Хабра-индексе.
Бинго: первый фактор определяющий Хабра-индекс число подписчиков! Заметим, что рост явно не линейный — достаточно взглянуть на компании в начале, середине и конце списка. Логично, что функция должна насыщаться при достаточном числе подписчиков, чтобы не было накруток и вообще фактор подписчиков не доминировал сами статьи. Значит функция, должна расти медленно и в какой-то момент выходить почти на константу. Хм, логарифм!
log(2) = 0.69
log(4) = 1.39
log(5) = 1.61
.....
Итого, убеждаемся, что функция имеет вид:
Заметим, что функция не зависит от кармы подписчиков, так как log(8) = 2.08:
Причем коэффициент равен 1, если у компании нет публикаций, и равен 3, если есть (как показал дальнейший анализ).
Рассмотрим 15ую страницу и возьмем две компании с одинаковым числом подписчиков и разным числом сотрудников:
[31]
Второй фактор: логарифм числа сотрудников. Опять же это логично, нельзя, чтобы наличие сотрудников доминировало над статьями. Причём, множитель перед логарифмом тоже зависит от других параметров.
Плюсы за старые статьи (~ больше месяца) влияния на рейтинг не оказывают:
[33]
Как мы видим старые статьи, даже в большом плюсе влияния не оказывают
Важнейшим условием применения нейросетей является наличие существенного объема данных, в котором "сигнал сильнее шума", причем пространство фич должно быть соотвествующим. То есть даже если у нас было много шумовых точек, имеющиеся закономерности бы определились сквозь шум. Как можно заметить, у нас фактически нет данных вообще, тем более явно демонстрирующих закономерности. А пространство особенностей небольшое и имеет какую-то несложную структуру (практически факторизуется). Таким образом Q2 подсказывает нам, что не стоит применять нейросети, если у вас нет большого количества адекватно размеченных данных.
Вывод: данные необходимо откуда-то достать. Пусть и в очень небольших количествах, но они нужны для точного формирования гипотез.
Где можно достать качественные исторические данные, когда их нет? Internet Time Machine!
Например, определяем, что временная константа для рейтинга корпоративных блогов порядка месяца, заглянув в историю компании:
http://web.archive.org/web/20151220201116/http://habrahabr.ru/company/oda/ [34]
Также мы хотим понять, как влияют плюсы к статьям. Для этого нам нужно узнать рейтинг компании сразу после того, как плюсы за статьи перестают учитываться — найти такие данные среди имеющихся в списке компаний фактически невозможно, так как должны совпасть практически все параметры, кроме плюсов к статье.
Таким образом формула принимает вид:
[36]
Причем, если мы произведем анализ рейтинга до появления поста и после, мы поймём, что если у компании есть хотя бы один пост, то рейтинг от подписчиков и работников увеличивается втрое и коэффициенты имеют следующий вид:
[37]
Заметим, что оценка коэффициента линейного члена примерная, но нам скорее важен сам характер зависимости, нежели абсолютно точное значение коэффициента.
Для анализа данного эффекта нужно собрать столь нетривиальные данные, что тут даже Машина Времени Интернета бессильна. Но не будем отчаиваться, у меня как раз оказался доступ к панели управления одной компании и там виден рейтинг во времени:
Эти точки соотвествуют моменту, когда у меня поднялся рейтинг от других статей. Значит рейтинг работников влияет на Хабра-индекс, анализ показывает, что снова логарифмически, с коэффициентом примерно равным 9:
Эффект от кармы сотрудников мы замеряем следующим образом, мы знаем, что посты Мосигры написаны одним человеком и карма им получена именно на этих постах, поэтому я замерил показатели в тот момент, когда у них не было активных статей (что было совсем не тривиально) и получил следующее:
name,blog,employees,subscribers,rating,size
.....
mos_igra,115,10,4877,59.48,101_200
Карма автора составляла порядка ~850, отсюда зависимость от кармы полученной на этих постах также логарифмическая с коэффициентом примерно равным ~3.
Как можно заметить, собиралась также информация по размеру компании. Воздействие размера компании на индекс получилось нулевым.
Отсюда видно, что рост также логарифмический по рейтингу подписчиков, причем коэффициент равный трём, наблюдаемый ранее при наличии статей, появляется и здесь:
[41]
Отсюда, формула для случая с публикациями имеет вид:
Причем коэффициент перед большой скобкой (где сумма всех логарифмов) равен 3, если у компании есть публикации и 1 если нет. Плюсы к постам считаются так же, как и плюсы к постам пользователей (то есть держатся в течении 30 дней).
При беглом просмотре статьи может показаться, что сбор данных — это исключительно второстепенный шаг. На самом деле, это фактически ключевой шаг в решении задачи, он позволил существенно сузить пространство гипотез и избавиться от второстепенных факторов, не влияющих на индекс.
Именно данных от Internet Time Machine и панели временного ряда компании мне не хватило, когда предпринял первую попытку анализа зависимости Хабра-индекса (~ в августе 2015го), чтобы вывести ключевые факторы. Например, взаимодействие параметров: коэффициент, зависящий от наличия статей, влияет сразу на группу параметров.
Краткий список важных пунктов, по которым можно распознать, что задача может быть потенциально решена нейросетями:
В разобранной нами задаче ни одно из этих условий не выполнено.
Иначе, всё это начинает напоминать подход кальсонных гномов [44]
Имея формулу с основными факторами, определяющими Хабра-индекс, мы можем ответить на вопрос Q3 — оценить эффективность различных стратегий ведения блога.
Важное наблюдение: линейный член легко мажорирует остальные логарифмические члены, даже при небольших значениях порядка +10. Нужно иметь 25 тысяч подписчиков, чтобы получить эффект сходный с одной статьёй в 10 плюсов (или зарегистрировать 150 сотрудников). Эффекта статьи от +20 одними подписчиками получить фактически невозможно.
Стратегия первая: регулярно писать много маленьких статей на ~+10, например каждую неделю. Тогда, рейтинг компании получает плюс ~ 3*5*10 ~= 150 и легко проходит на первую страницу, при условии, что остальные параметры имеют хоть сколько-нибудь реалистичные значение (например, 5 сотрудников и 100 подписчиков): данная стратегия достаточна эффективна, см. стратегию Microsoft, который сейчас на первом месте по рейтингу. Стратегия выглядит разумной, если вы большая компания и у вас много инфоповодов.
Стратегия вторая: писать одну-две вдумчивые статьи в месяц на 50-100 плюсов. Вы гарантировано попадаете в топ и первую страницу компаний. Минус стратегии — писать статьи такого качества в таком количестве невероятно сложно. С этим, например, справляются в Мосигре, см. визуализацию ниже.
Попытки накрутить подписчиков особо эффективной стратегией не являются, так как логарифм быстро выходит на константу (для любых разумных значений числа подписчиков). Зарегистрировать всех работников в блоге имеет смысл, но также имеет исключительно ограниченный эффект, даже у Яндекса, у которого здесь 577 сотрудников, эффект сравним с одной "постоянной" статьёй на +12-13.
Автор: varagian
Источник [4]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/matematika/114283
Ссылки в тексте:
[1] идёт: https://habrahabr.ru/post/277069/
[2] везде и всюду: https://habrahabr.ru/post/265979/
[3] в Excel: https://nnx-addin.org/
[4] Image: https://habrahabr.ru/post/278409/
[5] Определяем потенциальные факторы: https://habrahabr.ru/post/278409#factors
[6] Представление пространства характеристик: https://habrahabr.ru/post/278409#feature_space
[7] Научный метод тыка: https://habrahabr.ru/post/278409#scientific_method
[8] Сбор данных: https://habrahabr.ru/post/278409#data_gathering
[9] Подписчики: https://habrahabr.ru/post/278409#subscribers
[10] Сотрудники: https://habrahabr.ru/post/278409#employee
[11] Влияние старых заслуг (по статьям): https://habrahabr.ru/post/278409#old_posts
[12] Нехватка данных: https://habrahabr.ru/post/278409#lack_of_data
[13] Эффект кармы и рейтинга подписчиков и работников: https://habrahabr.ru/post/278409#employee_effects
[14] Рейтинг сотрудника: https://habrahabr.ru/post/278409#employee_rating
[15] Карма сотрудника от корпоративных постов: https://habrahabr.ru/post/278409#employee_karma
[16] Рейтинг подписчиков: https://habrahabr.ru/post/278409#subscriber_rating
[17] Финальная формула: https://habrahabr.ru/post/278409#final_formula
[18] Анализ применимости нейросетей: https://habrahabr.ru/post/278409#neural_analysis
[19] Анализ оптимальной стратегии: https://habrahabr.ru/post/278409#opimal_strategy
[20] отсюда: https://vc.ru/p/yandex-mail-habr-war
[21] презентациям компании: http://www.slideshare.net/MailRuGroup/ss-27333974
[22] Image: https://habrastorage.org/files/3f4/bd4/342/3f4bd4342b4b4203b783943135021a99.png
[23] Kaggle: https://www.kaggle.com/
[24] Image: https://habrastorage.org/files/415/018/558/4150185586ad4ce69f9a40547f5ec734.png
[25] Image: https://habrastorage.org/files/6ca/6e2/8c1/6ca6e28c17994423be59ae3f6d108ef8.png
[26] Image: https://habrastorage.org/files/834/1b6/3e5/8341b63e5470441d8c6597c8b01161bc.png
[27] https://habrahabr.ru/companies/: https://habrahabr.ru/companies/
[28] Image: https://habrastorage.org/files/0fd/a2a/ab9/0fda2aab97ac4b9ead97f14645022a8c.png
[29] Image: https://habrastorage.org/files/eb9/0c0/061/eb90c00610454de8b002dc080d48799d.png
[30] Image: https://habrastorage.org/files/38e/ec1/78b/38eec178bf08477baa989eef745de2df.png
[31] Image: https://habrastorage.org/files/6f1/920/475/6f19204755d146e38c1534c16352fd1b.png
[32] Image: https://habrastorage.org/files/42a/df6/219/42adf6219a914ea2906448993bbd2962.png
[33] Image: https://habrastorage.org/files/005/000/ed3/005000ed370247a196d2b164f815f6d0.png
[34] http://web.archive.org/web/20151220201116/http://habrahabr.ru/company/oda/: http://web.archive.org/web/20151220201116/http://habrahabr.ru/company/oda/
[35] Image: https://habrastorage.org/files/e05/2e1/f43/e052e1f4392f407bb3981f9bc96d74d4.png
[36] Image: https://habrastorage.org/files/eb7/1da/d43/eb71dad43ecc4fd88d94c58ef8c449f7.png
[37] Image: https://habrastorage.org/files/941/7cc/455/9417cc455f5c43b892b81c8cf2095403.png
[38] Image: https://habrastorage.org/files/fb3/45a/eff/fb345aeff5f64bc88a93db862b47f34d.png
[39] Image: https://habrastorage.org/files/11b/6dc/c6b/11b6dcc6be364cee8755a6d32550a200.png
[40] Image: https://habrastorage.org/files/efb/c49/c9a/efbc49c9a66049adb89e1f009a085ac1.png
[41] Image: https://habrastorage.org/files/7b3/591/3bd/7b35913bdd024b469b93f6356a172a58.png
[42] Image: https://habrastorage.org/files/f8a/757/260/f8a7572608104f54a4a8d6626b7d58cf.png
[43] эту: https://habrahabr.ru/company/abbyy/blog/225349/
[44] кальсонных гномов: https://ru.wikipedia.org/wiki/Гномы_(Южный_парк)
[45] Image: https://habrastorage.org/files/78f/9df/620/78f9df6202334b73aa7840929567750e.png
[46] Image: https://habrastorage.org/files/cce/13d/ccd/cce13dccd266453ca10a91614e1805e3.png
Нажмите здесь для печати.