Разговоры о Big Data идут уже давно, есть и книги на эту тему.
Но в общем и целом все они были о том, что Big Data — «круто»,
этим занимаются ведущие компании мира, а вот и кейсы от этих
компаний.
Теперь же у нас есть книга, которая показывает, как работать с Big
Data практически, причем без сложных программ, на обычном Excel.
Изучив ряд несложных приемов, руководители малого и среднего
бизнеса смогут находить в массивах своих данных неочевидные
зависимости, которые позволят получить серьезное конкурентное
преимущество.
Знания — это сила, а знания, полученные из больших данных, —
большая сила.
Сергей Турко,
главный редактор издательства
«Альпина Паблишер»
Data Smart
Перевод с английского
Москва
2016
УДК 330.47
ББК 65.051.03
Ф79
Переводчик А. Соколова
Редактор Л. Мамедова
Форман Дж.
Ф79 Много цифр: Анализ больших данных при помощи Excel / Джон Форман ; Пер.
с англ. А. Соколовой. — М. : Альпина Паблишер, 2016. — 461 с.
ISBN 978-5-9614-5032-3
Казалось бы, термин «большие данные» понятен и доступен только специалистам.
Но автор этой книги доказывает, что анализ данных можно организовать и в про-
стом, понятном, очень эффективном и знакомом многим Excel. Причем не важно,
сколько велик ваш массив данных. Техники, предложенные в этой книге, будут по-
лезны и владельцу небольшого интернет-магазина, и аналитику крупной торговой
компании. Вы перестанете бояться больших данных, научитесь видеть в них нуж-
ную вам информацию и сможете проанализировать предпочтения ваших клиентов
и предложить им новые продукты, оптимизировать денежные потоки и складские
запасы, другими словами, повысите эффективность работы вашей организации.
Книга будет интересна маркетологам, бизнес-аналитикам и руководителям раз-
ных уровней, которым важно владеть статистикой для прогнозирования и плани-
рования будущей деятельности компаний.
УДК 330.47
ББК 65.051.03
Введение ........................................................................................................................................ 11
4 Оптимизационное моделирование:
этот «свежевыжатый апельсиновый сок» не смешает себя сам ................ 129
Зачем ученым, работающим с данными, нужна оптимизация? .......................... 130
Начнем с простого компромисса ............................................................................. 131
Представим проблему в виде политопа ................................................................... 132
Содержание 7
Кто я?
Давайте прервемся ненадолго, и я расскажу вам о себе. Научный подход к из-
учению данных, который я проповедую, возник не вчера — к нему меня вел
долгий путь. Много лет назад я был консультантом по менеджменту. Я рабо-
тал над аналитическими проблемами таких организаций, как ФБР, министер-
ство обороны США, компания Coca-Cola, группы отелей Intercontinental и Royal
Carribbean. Из всего этого опыта я вынес одно: наука о данных должна стать
прерогативой не только ученых.
Я работал с менеджерами, которые покупали симуляции, когда им были нужны
модели оптимизации. Я работал с аналитиками, которые понимали только гра-
фики Ганта *, так что абсолютно все приходилось представлять в виде этих гра-
фиков. Как консультанту, мне было нетрудно расположить к себе покупателя,
имея в арсенале любые старые бумаги и миленькую презентацию в PowerPoint,
потому что они не могли отличить искусственный интеллект от бизнес-анализа,
а бизнес-анализ — от ВS.
Цель этой книги — расширение аудитории, способной понять и применить
техники научного анализа данных. Я не пытаюсь обратить вас, уважаемые чита-
тели, в специалистов по научной обработке данных против вашей воли. Я про-
сто хочу, чтобы вы научились применять науку о данных настолько, насколько
сможете, в той области, в которой вы уже хорошо разбираетесь.
Это заставляет задать вопрос: кто же вы?
Кто вы?
Не пугайтесь, я не использовал научный анализ данных, чтобы шпионить за вами.
Я понятия не имею, кто вы, но заранее благодарен вам за то, что раскошели-
лись на эту книгу.
Вот несколько архетипов (или личностей — для вас, маркетологи!), которые
пришли мне на ум, когда я писал эту книгу. Возможно, вы:
•
заместитель начальника по маркетингу и хотите использовать свои бизнес-
переменные стратегическим образом, для оценки продукта и сегмента
рынка, но не понимаете подходов, рекомендуемых разработчиками при-
ложений и переоцененными консультантами;
•
аналитик, предсказывающий спрос, который знает, что история заказов
фирмы содержит больше информации о клиентах, чем даже план на сле-
дующий квартал;
•
руководитель розничного интернет-магазина, желающий угадать по дан-
ным о предыдущих заказах, когда клиент скорее всего «созреет» для оче-
редной покупки;
•
бизнес-аналитик, который в состоянии просчитать растущие денежные
потоки и затраты на снабжение, но не знает, как перебросить мостик эко-
номии на издержках;
•
онлайн-маркетолог, который хочет чего-то большего для своей компании
от бесплатных текстовых сервисов, таких как электронные письма или со-
циальные сети. Пока же судьба разосланных сообщений незавидна — их
открывают и тут же выбрасывают в корзину.
Никаких сожалений —
только электронные таблицы
Эта книга не о программировании. Я даже готов гарантировать полное отсут-
ствие (ну, по крайней мере, до главы 10) в ней кода. Почему?
Да потому что я не хочу тратить первые сто страниц на возню с Git, объяв-
лением переменных среды и выступление Emacs против Vi.
Если вы пользуетесь исключительно Windows и Microsoft Office, работаете
в государственной структуре и вам запрещено скачивать и устанавливать при-
ложения из каких попало открытых источников и даже если MATLAB или ваш
графический калькулятор наводили на вас леденящий ужас во времена сту-
денчества, вам нечего бояться.
Нужно ли вам знать, как пишется код, чтобы перевести большую часть этих
техник в автоматизированную, производственную форму? Непременно! Вы
или кто-то из ваших коллег должен знать технологии хранения данных и уметь
управляться с кодом.
Нужно ли вам знать, как пишется код, чтобы понимать, различать и моде-
лировать эти техники? Совершенно ни к чему!
Именно поэтому я объясняю каждую методику с помощью электронных
таблиц.
Ну, ладно, если по-хорошему, то я должен признаться, что все вышесказан-
ное мною не совсем правда. Последняя глава этой книги — о переходе на язык
программирования R, ориентированный на анализ данных. Она предназначена
для тех из вас, кто захочет использовать эту книгу как трамплин к пониманию
новых глубин аналитики.
Условные обозначения
Чтобы помочь вам извлечь из текста максимальную пользу, я ввел в эту книгу
несколько условных обозначений.
ВСТАВКИ
Вставки типа той, в которой вы только что прочитали про Google Drive, раскрывают
«побочные» темы, упомянутые в тексте.
ВНИМАНИЕ!
ЗАМЕТКИ
Здесь вы найдете советы, подсказки, приемы и все в этом духе, что пришлось к слову
в текущем обсуждении.
Частенько я буду вставлять в текст небольшие кусочки кода Excel вроде этого:
=CONCATENATE(“THIS IS A FORMULA”, “IN EXCEL!”)/
=СЦЕПИТЬ(“ЭТО ФОРМУЛА”, “В EXCEL!”)
http://www.john-foreman.com.
Итак, начнем
В первой главе я намерен заполнить некоторые пробелы в ваших познаниях
об Excel, после чего вы сможете погрузиться непосредственно в практику.
К концу книги вы не только будете иметь представление о нижеперечислен-
ных техниках, но и приобретете опыт их применения:
Введение 19
•
оптимизация с использованием линейного и интегрального программи-
рования;
•
работа с временными рядами данных, определение трендов и изменений
сезонного характера, а также прогнозирование методом экспоненциаль-
ного сглаживания;
•
моделирование методом Монте-Карло в оптимизации и прогнозировании
сценариев для количественного выражения и адресации рисков;
•
искусственный интеллект с использованием общей линейной модели, функ-
ции логистических звеньев, ансамблевых методов и наивного байесов-
ского классификатора;
•
измерение расстояния между клиентами с помощью близости косинусов
угла, создание К-ближайших граф, расчет модулярности и кластеризация
клиентов;
•
определение выбросов в одном измерении по методу Тьюки или в несколь-
ких измерениях с помощью локальных факторов выброса;
•
применение пакетов R для использования результатов работы других про-
граммистов при выполнении этих задач.
Рабочая тетрадь Excel, используемая в этой главе «Concessions.xlsx», доступна для за-
грузки на сайте книги www.wiley.com/go/datasmart
Представьте себе, что вам жутко не везет по жизни. Даже став взрослым, вы
до сих пор живете с родителями и работаете в киоске на баскетбольных мат-
чах в своей старой школе. (Клянусь, это только наполовину автобиографично!).
У вас есть электронная таблица о вчерашних продажах, и выглядит она при-
мерно как рис. 1-1.
На рис. 1-1 показана каждая продажа: что именно продано, к какому типу еды
или напитков относится проданный товар, цена и процент прибыли с продажи.
1. Все, что вы жаждали знать об электронных таблицах, но боялись спросить 23
Форматирование ячеек
Excel предлагает статические и динамические опции для форматирования со-
держимого ячеек. Взгляните на столбец Е с фактической прибылью, который вы
только что создали. Выделите его, кликнув на серый заголовок колонки. Затем
кликните на выбранном столбце правой клавишей и выберите «Формат ячеек».
26 Много цифр
Специальная вставка
Конечно, гораздо удобнее работать, если формулы не путаются у вас под рукой,
как в колонке Е на рис. 1-4. А если это еще и формулы вроде RAND( )/СЛЧИС( ),
генерирующей случайные числа, которые меняют свое значение при каждом
автопересчете таблицы, то ваше раздражение вполне справедливо. Решение
проблемы — в копировании этих ячеек и вставке их обратно в таблицу в виде
постоянных величин.
Чтобы перевести формулы в цифры, просто выделите и скопируйте столбец Е,
заполненный формулами, и вставьте его обратно с помощью опции «Специаль-
ная вставка» (находится во вкладке «Главная» под опцией «Вставить» в Windows
28 Много цифр
Вставка диаграмм
Методичка, посвященная торговле с лотка, включает в себя графу «Калории»
с малюсенькой табличкой. В ней указано, сколько калорий содержится в каж-
дом напитке или закуске, которые продаются в киоске. Вы тоже легко можете
сделать такую диаграмму в Excel. Во вкладке «Вставка» («Диаграммы» в MacOS)
есть раздел, в котором находятся различные варианты отображения, такие как
столбчатая гистограмма, линейный график и круговая диаграмма.
ЗАМЕТКА
=MATCH("Hamburger", A2:A15,0) /
=ПОИСКПОЗ("Hamburger", A2:A15,0)
=INDEX(A1:B15,3,2) /
=ИНДЕКС(A1:B15,3,2)
=OFFSET(A1,3,0) /
=СМЕЩ(A1,3,0)
так же). Если у вас есть список значений и вы хотите выбрать, скажем, третье
наименьшее из них, данная функция делает это за вас. Назовите ячейку А21
Small/Наименьший, а в В21 напишите следующую формулу, содержащую гра-
ницы поиска и параметр 3:
=SMALL(B2:B15,3)/
=НАИМЕНЬШИЙ(B2:B15,3)
Использование VLOOKUP/ВПР
для объединения данных
Перейдем обратно к листу продаж на баскетбольных матчах. При этом мы в лю-
бое время можем обратиться предыдущему листу с калориями, просто указав
его название и поставив перед номером ячейки «!». Например, Calories!В2
является отсылкой к количеству калорий в пиве, несмотря на то, что вы в дан-
ный момент работаете с другим листом.
Предположим, вы захотите увидеть количество калорий на листе продаж
для каждого наименования товара. Вам нужно будет каким-то образом найти
содержание калорий в каждом товаре и поместить его в колонку, следующую
за прибылью. Что ж, оказывается, и для этого есть отдельная функция под на-
званием VLOOKUP/ВПР.
Назовем колонку F в нашем листе «Calories / Калории». Ячейка F2 будет со-
держать количество калорий из таблицы в товаре из первой строки — пиве. Ис-
пользуя эту формулу, можно указать в названии товара из ячейки А2 ссылку
на таблицу Calories!$A$1:$B$15 и номер столбца, из которого следует вы-
бирать значения. В нашем случае он второй по счету:
=VLOOKUP(A2,Calories!$A$1:$B$15,2,FALSE) /
=ВПР(A2,Calories!$A$1:$B$15,2,ЛОЖЬ)
Фильтрация и сортировка
Отразив в листе продаж калорийность ваших товаров, задайтесь целью видеть,
например, только товары из категории «Замороженные продукты» — иными сло-
вами, отфильтровать ваш лист. Для этого сначала выберите данные в рамках
А1:F200. Наведите курсор на А1 и нажмите Shift+Ctrl+ , а затем . Есть способ
еще проще — кликнуть наверху столбца и, удерживая клавишу мышки нажатой,
переместить курсор к столбцу F, чтобы выделить все 6 столбцов.
Затем, чтобы применить автофильтрацию к этим шести колонкам, нажмите
кнопку «Фильтр» из вкладки «Данные». Она похожа на серую воронку, как
на рис. 1-12.
Если автофильтрация включена, можно кликнуть на выпадающем меню,
которое появляется в ячейке В1, и выбрать для показа только определенные
категории (в данном случае отобразятся товары из категории «Замороженные
продукты»), как на рис. 1-13.
После фильтрации выделение столбцов данных позволяет нижней панели
показывать краткую информацию об этих ячейках. Например, отфильтровав
только замороженные продукты, можно выделить значения в столбце Е и ис-
пользовать нижнюю панель, чтобы быстро узнать сумму прибыли только по этой
категории товара, как на рис. 1-14.
34 Много цифр
Рис. 1-19. Лист прибыли по каждой позиции, созданный вставкой значений из сводной таблицы
40 Много цифр
=SUMPRODUCT(B2:B15,'Fee Shedule'!B2:O2) /
=СУММПРОИЗВ(В2:В15,'Комиссия'!В2:О2)
•
В Windows «Поиск решения» можно подключить, пройдя во вкладку «Файл»
(в Excel 2007 это верхняя левая кнопка Windows) Параметры Надстройки.
Нажав «Доступные надстройки» в выпадающем меню, отметьте «Поиск ре-
шения».
42 Много цифр
•
В MacOS «Поиск решения» добавляется из меню «Инструменты», в кото-
ром следует выбрать «Надстройки», а затем Solver.xlam.
Чтобы заставить «Поиск решения» искать решение, нужно задать ему пре-
делы ячеек, в которых следует вести поиск. В нашем случае мы хотим узнать,
1. Все, что вы жаждали знать об электронных таблицах, но боялись спросить 43
ЗАМЕТКА
Окно поиска решений в Excel 2011, показанное на рис. 1-23, выглядит примерно так же,
как и в Excel 2010 и 2013. В Excel 2007 интерфейс немного другой, но единственное су-
щественное отличие заключается в отсутствии окна выбора алгоритма. Зато можно
выбрать «Линейную модель» в параметрах поиска решений. Обо всех этих элементах
мы поговорим позже.
Точно так же можно добавить условие целочисленности для С2:С15, как по-
казано на рис. 1-25.
Нажмите ОК.
В Excel 2010, 2011 и 2013 убедитесь, что метод решения установлен на «По-
иск решения линейных задач симплекс-методом». Это наиболее подходящий
для нашей задачи метод, так как она линейна. Под линейностью я подразуме-
ваю, что для решения проблемы нужны только линейные комбинации значе-
ний из С2:С15 (суммы, произведения значений и констант количества кило-
калорий и т. д.).
Если бы в нашей модели встречались нелинейные комбинации (вроде квад-
ратного корня из решения, логарифма или экспоненты), то мы могли бы ис-
пользовать какой-нибудь другой алгоритм, предлагаемый Excel. Подробно этот
вариант рассматривается в главе 4.
В Excel 2007 обозначить задачу как линейную можно, нажав на «Линейную
модель» внизу окна «Параметры поиска решений». В итоге должно получиться
то, что изображено на рис. 1-26.
46 Много цифр
Подытожим
Вы научились быстро ориентироваться в Excel и выбирать области поиска, эф-
фективно использовать абсолютные ссылки, пользоваться специальной вставкой,
VLOOKUP/ВПР и другими функциями поиска ячейки, сортировкой и фильтрацией
48 Много цифр
имеющемся у вас массиве данных. Это знание поможет вам принимать опти-
мальные решения, причем на более детальном уровне, нежели раньше.
В этом разрезе кластеризация называется разведочной добычей данных, по-
тому что эти техники помогают «вытянуть» информацию о связях в огромных
наборах данных, которые не охватишь визуально. А обнаружение связей в соци-
альных группах полезно в любой отрасли — для рекомендаций фильмов на ос-
нове привычек целевой аудитории, для определения криминальных центров
города или обоснования финансовых вложений.
Одно из моих любимых применений кластеризации — это кластеризация
изображений: сваливание в кучу файлов изображений, которые «выглядят
одинаково» для компьютера. К примеру, в сервисах размещения изображе-
ний типа Flickr пользователи производят кучу контента и простая навигация
становится невозможной из-за большого количества фотографий. Но, ис-
пользуя кластерные техники, вы можете объединять похожие изображения,
позволяя пользователю ориентироваться между этими группами еще до под-
робной сортировки.
•
Styx: Come Sail Away
•
Everything But the Girl: Missing
•
Ace of Base: All that She Wants
•
Soft Cell: Tainted Love
•
Montell Jordan: This is How We Do It
•
Eiffel 65: Blue
52 Много цифр
ЗАМЕТКА
Документ Excel, который мы будем разбирать в этой главе, находится на сайте книги —
www.wiley.com/go/datasmart. В нем содержатся все исходные данные на случай,
если вам захочется поработать с ними. Или же вы можете просто следить за текстом,
подглядывая в остальные листы документа.
•
метаданные по каждому заказу сохранены в электронной таблице, включая
сорт, минимальное количество вина в заказе, скидку на розничную продажу,
информацию о том, пройден ли ценовой максимум, и о стране происхож-
дения. Эти данные размещены во вкладке под названием OfferInformation,
как показано на рис. 2-7;
58 Много цифр
•
зная, кто из клиентов что заказывает, вы можете вытряхнуть эту ин-
формацию из MailChimp и скормить электронной таблице с метадан-
ными предложений во вкладке «Transactions». Это переменные данные,
представленные, как показано на рис. 2-8, очень просто: покупатель
и его заказ.
Вы знаете, что в прошлом году было 32 предложения сделок и у вас есть спи-
сок из 324 заказов в отдельной вкладке, разбитый по покупателям. Но чтобы
измерить расстояние от каждого покупателя до кластерного центра, вы должны
поместить их в это 32-сделочное пространство. Иначе говоря, вам нужно по-
нять, что за сделки они не совершили, и создать матрицу сделок по покупате-
лям, в которой каждый клиент получает свой собственный столбец с 32 ячей-
ками сделок, заполненные единицами, если сделки были совершены, и нулями,
если нет.
Другими словами, вам нужно взять эту ориентированную по строкам таб-
лицу сделок и превратить ее в матрицу, в которой клиенты располагаются
по вертикали, а предложения — по горизонтали. Лучшим способом ее создать
являются сводные таблицы.
ЗАМЕТКА
СТАНДАРТИЗАЦИЯ ДАННЫХ
В этой главе каждое измерение ваших данных представлено одинаково, в виде бинар-
ной информации о заказах. Но во многих ситуациях, связанных с кластеризацией, мы
не можем так сделать. Вообразите сценарий, в котором люди кластеризованы по ро-
сту, весу и зарплате. Все эти три вида данных имеют разную размерность. Рост может
варьироваться от 1,5 до 2 метров, в то время как вес — от 50 до 150 кг.
В этом контексте измерение расстояния между покупателями (как между танцо-
рами в актовом зале) становится запутанным делом. Поэтому принято стандартизи-
ровать каждый столбец с данными, вычитая среднее и затем деля поочередно на меру
разброса под названием среднеквадратичное отклонение, которое мы вычислим в
главе 4. Таким образом, все столбцы приводятся к единой величине, количественно
варьируясь около 0.
Так как наши данные из главы 2 не требуют стандартизации, вы можете понаблю-
дать ее в действии в главе об определении выбросов — главе 9.
2. Кластерный анализ, часть I 61
небольшое. Начните этот пример с 4 — в идеальном мире вы, возможно, раз-
делили бы ваш список клиентов на 4 понятные группы по 25 человек в каждой
(что в реальности маловероятно).
Итак, если придется разделить покупателей на 4 группы, как наилучшим об-
разом их подобрать?
Вместо того чтобы портить симпатичный лист Matrix, скопируйте дан-
ные в новый лист и назовите его 4МС. Теперь вы можете вставить 4 столбца
после ценового максимума в столбцы от Н до К, которые будут кластер-
ными центрами. (Чтобы вставить столбец, кликните правой клавишей мышки
на столбце Н и выберите «Вставить». Столбец появится слева.) Назовите эти
кластеры от Cluster 1 до Cluster 4. Вы также можете применить на них услов-
ное форматирование, и когда бы вы ни установили их, вы сможете увидеть,
насколько они отличаются.
Лист 4МС появится, как показано на рис. 2-11.
В данном случае все кластерные центры — нули. Но технически они могут
быть какими угодно и, что вам особенно понравится — как на школьных тан-
цах, распределены таким образом, что минимизируют расстояние между каж-
дым покупателем и его кластерным центром.
Очевидно, что тогда эти центры будут иметь значения от 0 до 1 для каждой
сделки, так как все клиентские векторы бинарны.
Но что означает «измерить расстояние между кластерным центром и по-
купателем»?
10
8 (8,2)
4 (4,4)
1 2 3 4 5 6 7 8 9 10
10
8 (8,2)
7
42 + 22 = 4,47
6
4
4 (4,4)
2
3
1 2 3 4 5 6 7 8 9 10
Расстояния и принадлежность
к кластеру для всех!
Теперь вы знаете, как вычислить расстояние между вектором заказа и кла-
стерным центром.
Пришло время добавить Адамсу расчет расстояний до остальных кластер-
ных центров, перетянув ячейку L34 вниз на L37, а затем изменив вручную ссылку
на кластерный центр со столбца Н на столбец I, J и К в ячейках ниже. В резуль-
тате должны получиться следующие 4 формулы в L34:L37:
66 Много цифр
{=SQRT(SUM((L$2:L$33-$H$2:$H$33)^2))}
{=SQRT(SUM((L$2:L$33-$I$2:$I$33)^2))}
{=SQRT(SUM((L$2:L$33-$J$2:$J$33)^2))}
{=SQRT(SUM((L$2:L$33-$K$2:$K$33)^2))}
{=КОРЕНЬ(СУММА((L$2:L$33-$H$2:$H$33)^2))}
{=КОРЕНЬ(СУММА((L$2:L$33-$I$2:$I$33)^2))}
{=КОРЕНЬ(СУММА((L$2:L$33-$J$2:$J$33)^2))}
{=КОРЕНЬ(СУММА((L$2:L$33-$K$2:$K$33)^2))}
=MIN(L34:L37)
=МИН(L34:L37)
В данном случае расстояние одинаково для всех четырех кластеров, так что
формула выбирает первый (L34) и возвращает 1 (рис. 2-16).
Вы можете также перетащить эти две формулы на DG38: DG39. Для пущей
организованности добавьте названия строк 38 и 39 в ячейки 38 и 39 столбца G
«Minimum Cluster Distance» и «Assigned Cluster».
Если вы внимательно читали главу 1, то должны знать, что делать, когда слы-
шите слово «минимизировать»: начинается этап оптимизации, а оптимизация
производится с помощью «Поиска решения».
Чтобы использовать «Поиск решения», вам понадобится ячейка для резуль-
татов, поэтому в А36 просуммируем все расстояния между покупателями и их
кластерными центрами:
=SUM(L38:DG38)
=СУММА(L38:DG38)
ЗАМЕТКА
У вас есть все, что нужно для постановки задачи перед «Поиском решения»:
•
цель: минимизировать общие расстояния от покупателей к их кластер-
ным центрам (А36);
•
переменные: вектор каждой сделки относительно кластерного центра
(Н2:К33);
•
условия: кластерные центры должны иметь значения в пределах от 0 до 1.
Н2:К33 <=1, как и все векторы сделок. Убедитесь, что переменные отмечены
как положительные и выбран эволюционный алгоритм (рис. 2-17).
Но постановка задачи — еще не все. Придется немного попотеть, выбирая
нужные опции эволюционного алгоритма, нажав кнопку «Параметры» в окне
«Поиска решения» и перейдя в окно настройки. Советую установить максималь-
ное время секунд на 30 побольше, в зависимости от того, сколько вы готовы
ждать, пока «Поиск решений» справится со своей задачей. На рис. 2-18 я по-
ставил свое на 600 секунд (10 минут). Таким образом, я могу запустить «Поиск
решения» и пойти обедать. А если вам захочется прервать его пораньше, про-
сто нажмите Escape и выйдите из него с наилучшим решением, которое тот
успел найти.
Для тех, кому интересно: внутреннее устройство эволюционного алгоритма
«Поиска решения» описано в главе 4 и на http://www.solver.com.
Нажмите «Выполнить» и наблюдайте, как Excel делает свое дело, пока эво-
люционный алгоритм не сойдется.
70 Много цифр
Рис. 2-20. Создание листа таблицы для подсчета популярности сделок с помощью кластеров
72 Много цифр
На листе 4МС у вас были привязки по кластерам от 1 до 4 в строке 39. Все,
что вам нужно сделать, чтобы сосчитать сделки по кластерам, — это взглянуть
на названия столбцов от Н до К на листе 4МС — TopDealsByCluster, посмотреть,
кто из листа 4МС был привязан к этому кластеру в строке 39, а затем сложить
количество их сделок в каждой строке. Таким образом мы получим общее ко-
личество покупателей в данном кластере, совершивших сделки.
Начнем с ячейки Н2, в которой записано количество покупателей кластера 1,
принявших предложение № 1, а именно январский мальбек. Нужно сложить зна-
чения ячеек диапазона L2: DG2 на листе 4МС, но только покупателей из 1 клас-
тера, что является классическим примером использования формулы SUMIF /
СУММЕСЛИ. Выглядит она так:
=SUMIF('4MC'!$L$39:$DG$39,'4MC — TopDealsByCluster'!
H$1,'4MC'!$L2:$DG2)
=СУММЕСЛИ('4MC'!$L$39:$DG$39,'4MC — TopDealsByCluster'!
H$1,'4MC'!$L2:$DG2)
вино, и Франция — производитель товара для 3 из 4 из них. Тем не менее эти
предположения неоднозначны (рис. 2-24).
Что касается кластера 4, то этим ребятам по какой-то причине явно понрави-
лось августовское предложение на шампанское. Также 5 из 6 крупнейших сде-
лок — на французское вино, а 9 из 10 первых по величине — на большой объем
товара (рис. 2-25). Может, это тяготеющий к французским винам крупноопто-
вый кластер? Пересечение кластеров 3 и 4 тоже беспокоит.
И это подводит нас к вопросу: настолько ли хорошо подходит 4 для значе-
ния k в кластеризации по k-средним? Возможно, нет. Но как узнать?
Рис. 2-25. Сортировка кластера 4 — эти парни просто любят шампанское в августе?
Если я немного ближе к членам своего кластера, чем соседнего, то эти ре-
бята — хорошая компания для меня, не так ли? Но что, если ребята из соседнего
кластера практически так же близки ко мне, как и мои кластерные собратья?
Выходит тогда, что моя привязка к кластерам немного сомнительна?
Вот как формально записать это значение:
ЗАМЕТКА
Между прочим, есть много способов поместить эту нумерацию 0–99 в Excel. К примеру,
можно просто начать печатать 0, 1, 2, 3, а затем выделить их и потянуть за нижний угол
выделенной области до конца списка клиентов. Excel поймет это и продолжит число-
вой ряд. В результате должна получиться пустая матрица, как на рис. 2-27.
Но OFFSET(Matrix!$H$2:$H$33,0,1) / СМЕЩ(Matrix!$H$2:$H$33,0,1) —
это столбец сделок Аллена.
OFFSET(Matrix!$H$2:$H$33,0,2) / СМЕЩ(Matrix!$H$2:$H$33,0,2) —
столбец Андерсона, и т. д.
И здесь нам как раз и пригодится нумерация строк и столбцов 0–99. Вот,
например:
{=SQRT(SUM((OFFSET(Matrix!$H$2:$H$33,0,Distances!C$1)-OFFSET
(Matrix!$H$2:$H$33,0,Distances!$A3))^2))}
2. Кластерный анализ, часть I 79
{=КОРЕНЬ(СУММА((СМЕЩ(Matrix!$H$2:$H$33,0,Distances!C$1)-СМЕЩ
(Matrix!$H$2:$H$33,0,Distances!$A3))^2))}
=SMALL(C2:F2,2)
=НАИМЕНЬШИЙ(C2:F2,2)
=(J2-I2)/MAX(J2,I2)
=(J2-I2)/МАКС(J2,I2)
Создаем копию листа 4МС и называем ее 5МС. Все, что нужно — это доба-
вить пятый кластер на лист и ввести его в свои расчеты.
Кликните для начала правой клавишей мыши на столбце L и вставим но-
вый столбец, который назовем Cluster 5. Вам также нужно вставить расстоя-
ние в строку кластера 5, кликнув на строке 38 правой клавишей и выбрав
«Вставить». Скопируйте расстояние в строку кластера 4 в 38 строке и поме-
няйте столбец с K на L, чтобы создать строку с расстоянием до кластера 5.
Что касается строк Minimum Cluster Distance и Assigned Cluster, то ссылки
на строку 37 нужно исправить на 38, чтобы включить в расчет новое кла-
стерное расстояние.
В результате должна получиться таблица как на рис. 2-32.
Рис. 2-34. Замена привязок к 4 кластерным центрам привязками к 5 кластерным центрам
ЗАМЕТКА
Сортируя кластер 1, мы снова ясно видим наш кластер пино нуар. (рис. 2-35).
Что касается кластера 3, то он снова взрывает мой мозг. Единственное, что
можно в нем выделить — это, по какой-то причине, южноафриканское эспу-
манте (рис. 2-37).
Вместо этого предлагаю поразмыслить над тем, что мы делаем не так и от-
куда появляются эти непонятные кластеры, полные шума.
K-медианная кластеризация
и асимметрическое измерение расстояний
Как правило, стандартной кластеризации по k-средним евклидовыми расстоя-
ниями бывает вполне достаточно, но тут мы столкнулись с небольшими проб-
лемами, которые часто встречаются при кластеризации данных, имеющих
большой разброс (розничная ли это торговля, классификация ли текстов или
биоинформатика).
•
счетчик в формуле считает только совпадения сделок, то есть он асимме-
тричен и поэтому отлично подходит к данному случаю;
•
квадратные корни из количества сделок по каждому вектору в знамена-
теле обращают наше внимание на тот факт, что вектор, в котором совер-
шены все сделки — назовем его неразборчивым — гораздо дальше отстоит
от другого вектора, чем тот, в котором совершены те же сделки и не со-
вершены несколько других. Вам нужно совпадение векторов, «вкусы» ко-
торых совпадают, а не один вектор, содержащий «вкусы» другого.
92 Много цифр
•
для бинарных данных эта близость находится в промежутке между 0 и 1,
причем у двух векторов не получается 1, пока все их заказы не совпадут.
Это означает, что 1 — близость по косинусу может использоваться как мера
расстояния, называемая расстоянием по косинусу, которое также варьи-
руется от 0 до 1.
(1,1)
45° (1,0)
1 совпадающий заказ
cos(45°) = = 0,707
2 заказа 1 заказ
ЗАМЕТКА
Подытожим
В этой главе было описано много разных отличных приемов. Вспомним все,
что вы увидели и узнали:
•
евклидово расстояние;
•
кластеризацию методом k-средних с использованием «Поиска решения»
для оптимизации центров;
•
как понимать кластеры, раз уж они у вас есть;
•
как рассчитать силуэт, данный по k-средним;
•
k-медианную кластеризацию;
•
манхэттенское расстояние / расстояние городского квартала;
•
близость и расстояние по косинусу.
Рис. 3-2. Три твита — и только один из них имеет отношение к нашему проекту
Обычно я делаю это раз в неделю. А вот вероятность того, я буду слушать
сегодня какую-нибудь попсовенькую электронную музычку:
р(Джон ест тако белл, Джон слушает электронную музычку) = 0,2 × 0,8 = 0,16
р(Джон ест тако белл, Джон слушает электронную музычку) = р(Джон ест
тако белл) × р(Джон слушает электронную музычку | Джон ест тако белл)
р(Джон ест тако белл, Джон слушает электронную музычку) = р(Джон ест
тако белл) × (Джон слушает электронную музычку) = 0,16
попсовый, вероятность того, что я слушаю попсовое техно при том, что я слу-
шаю Depeche Mode, равна 1.
А это значит следующее: если я хочу вычислить совместную вероятность
этих событий, я не просто их перемножаю. Следуя цепному правилу,
Правило Байеса
Так как я определил Depeche Mode как попсовое техно, вероятность того, что
я слушаю попсовое техно при том, что я слушаю Depeche Mode, равна 1. Но нет ли
других способов? У нас еще нет вероятности для этого утверждения:
техно сегодня, шансы, что это будет Depeche Mode подскакивают до 37,5%!
Отлично.
Это вероятность того, что твит либо о приложении, либо о чем-то другом,
при том, что мы видим слова «слово1», «слово2», «слово3» и т. д.
Стандартное применение наивной байесовской модели классификатора —
это создание нового документа на основе того, к какому классу вероятнее
всего относятся твиты, если рассматриваются слова, из которых они состоят.
Другими словами, если
Точно так же
Такая конфигурация — просто вероятность того, что эти слова вообще встре-
тятся в документе. Так как эта величина не меняется от класса к классу, вы
можете сократить на нее неравенство МАР, еще и при том, что вас интересует
только наибольшее значение из
Но как подсчитать вероятность наличия набора слов, зная, что эта запись —
про приложение или, наоборот, о чем-то другом?
И тут все действительно начинает становиться идиотским!
Предположим, вероятности наличия этих слов в документах не зависят одна
от другой. Тогда получаем
Ну это же идиотизм, не так ли? Это наивность, потому что если бы я вам
сказал, что у меня есть письмо-спам со словом «дисфункция» и предложил бы
отгадать предшествующее ему слово, вы бы почти наверняка сказали «эрек-
тильная». Это зависимость, которая откровенно игнорируется.
Самое смешное, что, несмотря на широкое практическое применение, этот
идиотизм никого не волнует. Это из-за того, что правилу МАР все равно, что
110 Много цифр
р(«блестеть» | приложение)
3. Наивный байесовский классификатор и неописуемая легкость бытия идиотом 111
•
редкие слова;
•
исчезновение порядка (антипереполнение).
р(«Тубал-Каин» | приложение) = 0
Но тогда вы получите:
0,2 × 0,8
Да начнется Excel-вечеринка!
ЗАМЕТКА
В электронной таблице для этой главы — Mandrill.xslx, есть два листа с ис-
ходными данными. Первый, AboutMandrillApp, содержит 150 твитов, по одному
на строку, относящихся к приложению Mandrill. Второй, AboutOther, содержит
150 твитов об остальных мандрилах.
Перед началом хочу сказать — добро пожаловать в мир обработки есте-
ственного языка (Native Language Processing, NLP)! NLP пережевывает текст,
написанный человеком, и выплевывает знания. «Человеческое» содержимое
(например, записи в Twitter) готово для потребления компьютером. Перед этим
необходимо провести несколько мелких операций.
Это переведет первую запись в строчной вид. В С2 вырежем все фразы.
Не стоит кромсать ссылки, так что вырежем все части, после которых есть про-
бел с помощью команды SUBSTITUTE/ПОДСТАВИТЬ:
=SUBSTITUTE(В2,". "," ")
=ПОДСТАВИТЬ(В2,". "," ")
Эта формула заменяет знаки ". " единичным пробелом " ".
Вы также можете указать ячейку D2 в С2 и заменить все двоеточия с про-
белами после них единичными пробелами:
114 Много цифр
=SUBSTITUTE(D2,"?"," ")
=SUBSTITUTE(E2,"!"," ")
=SUBSTITUTE(F2,";"," ")
=SUBSTITUTE(G2,","," ")
=ПОДСТАВИТЬ(D2,"?"," ")
=ПОДСТАВИТЬ(E2,"?"," ")
=ПОДСТАВИТЬ(F2,"?"," ")
=ПОДСТАВИТЬ(G2,"?"," ")
Разное о пробелах
Теперь создайте два новых листа и назовите их AppTokens и OtherTokens.
Вам необходимо сосчитать, сколько раз каждое слово используется в запи-
сях данной категории. Это значит, что вам нужно собрать все слова из твитов
в одном столбце. Резонно предположить, что каждый твит содержит не более
3. Наивный байесовский классификатор и неописуемая легкость бытия идиотом 115
30 слов (но вы смело можете увеличить их количество до 40 или даже 50), так
что если вы собираетесь присваивать каждому жетону отдельную строку, вам
понадобится 150 × 30 = 4500 строк.
Для начала назовите ячейку А1 на обоих листах «Tweet».
Выделите А2:А4501 и с помощью специальной вставки вставьте значения
твитов из столбца Н двух начальных листов. Таким образом вы получите спи-
сок всех обрабатываемых твитов, как показано на рис. 3-4. Обратите внима-
ние: так как вы вставляете 150 твитов в 4500 строк, Excel повторяет все за вас.
Восхитительно!
Это означает, что если вы выделите первое слово из первого твита в строке 2,
этот самый твит повторится для выделения второго слова в строке 152, тре-
тьего — в 302 и т. д.
Так или иначе, помните, что эта формула выдаст ошибку, как только закон-
чатся символы в записи — если в ней, к примеру, меньше 30 слов, которые вы
планировали. Чтобы справиться с этим, вам нужно вставить формулу в утверж-
дение IFERROR/ЕСЛИОШИБКА и просто прибавить 1 к длине твита, чтобы найти
положение после последнего слова:
=IFERROR(FIND(" ",A152,B2+1),LEN(A152)+1)
=ЕСЛИОШИБКА(НАЙТИ(" ",A152,B2+1),LEN(A152)+1)
Теперь еще раз вернемся к коротким твитам в конце строки, в которых у нас
рано заканчивались слова. Если есть ошибка, превратите этот жетон в комби-
нацию «.», которую потом легко будет проигнорировать:
=IFERROR(MID(A2,B2+1,B152-B2–1),".")
=ЕСЛИОШИБКА(ПСТР(A2,B2+1,B152-B2–1),".")
Можете также распространить это на весь лист двойным кликом. Это зна-
чение позволяет вам находить и удалять любой жетон в три или менее симво-
лов, которые практически всегда бессмысленны.
ЗАМЕТКА
Обычно в таком типе обработки натурального языка кроме удаления всех коротких слов
существует еще список стоп-слов для отдельного языка (в данном случае, английского),
которые также удаляются. Стоп-слова — это слова с очень низким лексическим содер-
жанием, которое подобно содержанию питательных веществ для модели «набор слов».
К примеру, «потому что» и «вместо» могут быть стоп-словами из-за того, что они
обычные и не особенно помогают отличить один документ от другого. Самые распро-
страненные стоп-слова в английском почти всегда короткие: «a», «and», «the» и т. д., по-
этому в данной главе будет рассмотрен наиболее простой, но и наиболее драконовский
способ удаления коротких слов из твитов.
Если вы все делали вместе со мной, у вас должен получиться лист AppTokens,
показанный на рис. 3-8 (лист Other Tokens идентичен ему, за исключением тви-
тов, вставленных в столбец А).
Теперь у вас есть только длинные жетоны из каждого твита, и все они под-
считаны.
Настало время «пристегнуть» вероятность к каждому жетону. Перед запу-
ском расчета примените оговоренную ранее функцию дополнительного сгла-
живания, добавив 1 к каждому жетону.
Назовите столбец С Add One To Everything и установите С5 = В5 + 1 (С4 + В4
в Windows, где Еxcel строит сводные таблицы на строку выше, просто чтобы
рассердить читателей). Вы можете распространить формулу двойным щелчком.
Так как вы добавили 1 ко всему, вам понадобится новый подсчет жетонов.
Внизу таблицы (строка 828 на листе AppTokensProbability) введите в ячейку
120 Много цифр
сумму всех ячеек, находящихся над ней. Еще раз отмечу, что если вы работаете
с Windows, то все сведется на одну строку выше (С4:С826 для суммирования):
=SUM(С5:С827)
=СУММА(С5:С827)
=VLOOKUP(D2,AppTokensProbability!$A$5:$E$827,5,FALSE)
=ВПР(D2,AppTokensProbability!$A$5:$E$827,5,FALSE)
от функции. Как обсуждалось ранее, эти редкие слова должны иметь вероят-
ность, равную 1, деленную на общее число жетонов в ячейке В828 на листе
AppTokensProbability.
Имея дело с редкими словами, нужно вложить VLOOKUP/ВПР в проверку
ISNA/ЕНД и работать с логарифмированными вероятностями редких слов, если
есть такая необходимость:
IF(ISNA(VLOOKUP(D2,AppTokensProbability!$A$5:$E$827,5,
FALSE)),LN(1/AppTokensProbability!$C$828),
VLOOKUP(D2,AppTokensProbability!$A$5:$E$827,5,FALSE))
ЕСЛИ(ЕНД(ВПР(D2,AppTokensProbability!$A$5:$E$827,5,ЛОЖЬ)),
LN(1/AppTokensProbability!$C$828),ВПР(D2,
AppTokensProbability!$A$5:$E$827,5,ЛОЖЬ))
=SUM(D25:AI25)
=СУММА(D25:AI25)
Подытожим
Эта глава — сверхкороткая, по сравнению с остальными в этой книге. Почему?
Потому что наивный Байес очень простой! И за это все его любят. Кажется, что
он делает что-то сложное волшебным образом, хотя на самом деле он просто
полагается на хорошую память компьютера, помнящего, насколько часто каж-
дый жетон появляется в каждом классе.
Есть такая пословица: «Опыт — отец мудрости, а память — ее мать». К «наив-
ному Байесу» она подходит на 100%. Полнота «псевдомудрости» программы со-
стоит из загруженных и хранящихся данных и кусочка математической изо-
ленты.
«Наивный Байес» даже немного приспособлен к простому применению в коде.
Например, вот как он выглядит в С#:
http://msdn.microsoft.com/en-us/magazine/jj891056.aspx
вот на Ruby:
http://blog.saush.com/2009/02/11/naive-bayesian-classifiers-and-
ruby/
Одно из замечательных свойств этой модели — то, что она отлично рабо-
тает, даже если кругом куча элементов (feature) — вводных данных модели ИИ,
с помощью которых вы строите свои предположения (в случае с нашими дан-
ными, каждое слово представляет собой элемент). Но, несмотря на это, не за-
бывайте, что у простой модели набора слов (bag of words) тоже есть свои не-
достатки. Если честно, наивная часть модели может стать причиной появления
проблем. Приведу пример.
Предположим, я создал «наивный байесовский» классификатор, который
пытается классифицировать твиты по отношению к написанному на положи-
тельные и отрицательные. И когда кто-то пишет что-то вроде:
Так как модель набора слов не учитывает структуру текста и принимает все
жетоны за беспорядочную кучу, возникает проблема. Многие наивные байесов-
ские модели на самом деле рассматривают в качестве жетонов фразы, а не от-
дельные слова. Это помогает немного контекстуализировать слова (и делает
предположения классификатора еще более нелепыми, но кому какая разница!).
Для выполнения такой работы нужно больше тренировочных данных, потому
что количество возможных фраз из N слов гораздо больше, чем количество
возможных слов.
Для записей, подобных этому отзыву на фильм, может понадобиться мо-
дель, которая учитывает положение слов. За какой фразой последнее слово?
Получение подобной информации немедленно устраняет все мысли о простой
концепции «набора слов».
Конечно, это все придирки. «Наивный Байес» — это простой и многофунк-
циональный инструмент ИИ. Его легко прототипировать и испытывать. Попро-
буйте помоделировать с помощью этого классификатора разные идеи, и если
они будут достаточно хорошо работать — вы молодец. Если результаты много-
обещающи, но убоги — можно обратить свой взор на что-нибудь «помясистее»,
вроде комплексной модели (ensemble model), рассмотренной в главе 7.
Оптимизационное
4 моделирование:
этот «свежевыжатый
апельсиновый сок»
не смешает себя сам
Н едавно Business Week опубликовала статью, посвященную новым разра-
боткам Coca-Cola. С помощью большой аналитической модели компания
пытается определить, как смешать свежий апельсиновый сок разных сортов
и создать идеальный «продукт-не-из-концентрата».
Я обсуждал статью с коллегами, и один из них посетовал, что компании,
мол, не пришлось бы напрягаться, имей она в своем распоряжении модель ис-
кусственного интеллекта.
На мой взгляд, он был неправ. Да, Coca-Cola пользуется не моделью искусствен-
ного интеллекта, а оптимизационной моделью. Давайте разберемся, в чем же
разница.
Модель искусственного интеллекта предсказывает результаты, основываясь
на вводных данных. Но задача Coca-Cola в данном случае другая. Ей не нужно
знать, что получится, если смешать сок А и сок В. Ей принципиально понять,
какие соки из А, В, С, D и т. д. следует закупать и в каких пропорциях смеши-
вать. На основе анализа данных и исходных условий (в том числе имеющегося
инвентаря, спроса, характеристик и т. д.) Coca-Cola должна решить, как именно
смешать разные по своим свойствам соки (к примеру, один сок слишком слад-
кий, а другой, наоборот, недостаточно), чтобы добиться «правильного» вкуса
по минимальной стоимости и с максимальной прибылью.
В этих действиях нет ничего, что можно было бы предсказать. Модель созда-
ется для изменения будущего. Оптимизационное моделирование — это аналити-
ческое арминианство в сравнении с кальвинизмом искусственного интеллекта*.
Компании любого профиля используют оптимизационные модели каждый
день, чтобы найти ответы на вопросы типа:
•
как составить расписание для сотрудников колл-центра, чтобы оно соот-
ветствовало их отпускным запросам, сбалансировало переработки и ис-
ключало убийственные круглосуточные дежурства, складывающиеся из не-
скольких смен подряд для каждого сотрудника?
•
Какие возможности бурения нефтяных скважин использовать для полу-
чения максимального дохода, держа при этом под контролем все риски?
•
Когда следует делать новые заказы в Китае и как их доставлять, чтобы ми-
нимизировать стоимость и соответствовать ожидаемому спросу?
Зачем ученым,
работающим с данными, нужна оптимизация?
Если вы посмотрите фильмы о Джеймсе Бонде или «Миссия невыполнима»,
то заметите, что довольно много чего происходит еще до вступительных ти-
тров. И главное, что заставляет зрителей прирасти к экрану, — это взрыв.
4. Оптимизационное моделирование 131
Ваша работа днем: дойка коров и продажа сладкого сливочного масла мест-
ному населению.
Ваша работа ночью: сборка и продажа автоматов французскому Сопротив-
лению.
Ваша жизнь сложна и полна опасности. Вы начисто отрезаны от штаба и вам
остается лишь работать на ферме, стараясь не попасться на «крючок» наци-
стам. Денег в вашем бюджете хватает только, чтобы свести концы с концами,
собирая автоматы и сбивая масло. Вы должны продержаться до конца войны.
Нельзя потерять ферму, ведь это — прикрытие!
После долгих раздумий о своем нелегком положении, вы смогли охаракте-
ризовать его тремя составляющими.
•
Цель. Вы получаете $195 (ой, простите, франков, хотя, честно говоря, мой
Excel настроен на доллары, и я не собираюсь менять настройки ради этого
примера) за каждый автомат, который продаете своему доверенному лицу —
Пьеру. Вы получаете $150 за каждую бочку проданного на рынке масла. Вам
нужно получать как можно больший доход, чтобы окупать ферму.
•
Задача. Вам необходимо выяснить, сколько автоматов и сколько масла вам
нужно продать за месяц, чтобы получить максимальную прибыль.
•
Условия и ограничения. Производство одной бочки масла обходится вам
в $100, а сборка одного автомата — в $150. Ваш месячный бюджет на про-
изводство новой продукции — $1800. Вам приходится хранить эту продук-
цию в своем 21-кубометровом подвале. Автомат занимает половину кубо-
метра, бочка масла занимает полтора кубометра. Ни автоматы, ни масло
невозможно хранить в другом месте: первые заметят нацисты, а второе
испортится.
50
40
Автоматы
30
20
Ог
ра
ни
че
10 ни
яб
юд
же
та
10 20 30 40 50
Масло
50
40
Огр
Автоматы
30
ани
чени
я по
20
двал
Ог
ра
ни
а
10 че
ни
яб
юд
же
та
10 20 30 40 50
Масло
Так как функция вашей прибыли — это $150 × масло + $195 × автомат, каж-
дая линия ее уровня может быть определена как прямая $150 × масло + $195 ×
× автомат = С, где С — фиксированная величина прибыли.
Рассмотрим случай, где С = $1950. Для линии уровня $150 × масло + $195 ×
× автомат = $1950 обе точки — (0,10) и (13,0) — принадлежат ей, как и любая
комбинация из масла и автоматов, при которой $150 × масло + $195 × автомат
равняется $1950. Эта линия уровня изображена на рис. 4-3.
Используя идею линии уровня, можно начать думать над проблемой макси-
мизации прибыли, сдвигая линию уровня по направлению нарастания прибыли
(это направление будет перпендикулярно самой линии) до последнего возмож-
ного значения, находящегося в области допустимых значений.
На рис. 4-3 линия уровня нарисована пунктиром, а стрелка, отходящая от нее,
представляет собой целевую функцию.
50
40
Автоматы
30
20
10 Ли
ни
яу
ро
вн
я
10 20 30 40 50
Масло
50
40
Автоматы
30
20
10
10 20 30 40 50
Масло
50
40
Автоматы
30
20
10
10 20 30 40 50
Масло
Работа в Excel
Перед тем, как перейти от этой небольшой задачи к вещам более серьезным,
я хочу построить и решить ее в Excel. Первое, что вам нужно сделать на чистом
листе — это создать пространство для целевых переменных и переменных ре-
шения. Назовите ячейку В2 местом, куда будет записываться общая прибыль,
а ячейки В4:С4 — областью, куда будут занесены решения по продукции.
Под целевой секцией и секцией решения добавьте информацию о размерах
и стоимости автоматов и масла, ограничения площади для хранения и бюджета,
а также вклад каждого вида товара в прибыль.
Готовая для заполнения таблица должна выглядеть как на рис. 4-6.
К этим данным следует добавить немного расчетов, а именно расчет ограни-
чений и расчет прибыли. В столбце Е, следом за ячейками с ограничениями Limit,
умножьте количество произведенных автоматов и масла на их относительный
объем и стоимость, а затем сложите все полученное в столбце Used. Например,
в ячейку Е 7 можно записать используемую площадь подвала с помощью формулы:
138 Много цифр
=SUMPRODUCT(B4:C4,B7:C7)
=СУММПРОИЗВ(B4:C4,B7:C7)
Замечу, что эта формула является линейной, потому что только одна об-
ласть, В4:С4, — область решения. Другая область просто содержит коэффици-
енты хранения. Вы можете произвести аналогичные вычисления, чтобы узнать
общую сумму, потраченную на масло и автоматы.
Для вычисления целевой функции вам нужно взять SUMPRODUCT/СУММПРО-
ИЗВ от заказанного количества в строке 4 с прибылью в строке 9. Ввод допу-
стимых значений, таких как 1 автомат и 1 бочка масла, дает нам лист с реше-
нием, как на рис. 4-7.
Что касается ограничений, то их вам нужно добавить два. Начните с ограни-
ченного объема подвала. Нажмите кнопку «Добавить» рядом с полем ограниче-
ний. При заполнении небольшого поля следует указать, что значение в ячейке Е7
должно быть меньше или равно (<=) значению в ячейке D7 (рис. 4-10), а объем
используемой площади — меньше ограничения.
ЗАМЕТКА
Обратите внимание, что «Поиск решения» добавит абсолютные ссылки ко всем пере-
менным в ваших формулах. И это ничего не меняет. Если честно, я не знаю, зачем он это
делает, потому что вы не можете перетаскивать формулы в контексте модели «Поиска
решения». Для более подробного описания абсолютных ссылок обратитесь к главе 1.
ЗАМЕТКА
Перед тем, как нажать «ОК», посмотрите, какие еще типы ограничений предлагает вам
«Поиск решения». Кроме стандартных ≤, ≥ и = есть довольно занятные, например int,
bin и dif. Эти странные условия можно поместить в ячейки, чтобы значения стали
целыми, бинарными (0 или 1) или «все разные». Запомните условие «int». Немного
погодя мы к нему вернемся.
Теперь выберем способ решения — это должен быть «поиск решения линей-
ных задач симплекс-методом». Все готово (рис. 4-11)!
$500
Бонус Пьера
$0
5 10 15 20
Автоматы
•
генерирует пул исходных решений (что-то вроде генетического пула) раз-
ной степени вероятности;
•
каждое решение имеет некий уровень пригодности к выживанию;
•
решения размножаются перекрестным переносом, то есть их компоненты
выбираются из двух или трех существующих решений и затем комбини-
руются;
•
существующие решения мутируют в новые;
•
имеет место локальный поиск, в процессе которого генерируются новые
решения вблизи лучшего на данный момент решения в популяции;
•
происходит отбор: случайно выбранные неуспешные кандидаты в реше-
ния выбрасываются из генетического пула.
Логические проверки:
•
IF/ЕСЛИ
•
COUNTIF/СЧЁТЕСЛИ
•
SUMIF/СУММЕСЛИ
Статистические функции:
•
MIN/МИН
•
MAX/МАКС
•
MEDIAN/МЕДИАНА
•
LARGE/НАИБОЛЬШИЙ
•
NORMDIST/НОРМРАСП, BINOMDIST/БИНОМРАСП, и т. д.
Функции поиска:
•
VLOOKUP/ВПР
•
HLOOKUP/ГПР
•
OFFSET/СМЕЩ
•
MATCH/ПОИСКПОЗ
•
INDEX/ИНДЕКС
Я вижу, вы уже готовы воспарить от восторга, так что позвольте мне не-
много «приземлить» вас. С эволюционным алгоритмом все же возникают не-
которые проблемы.
•
Нет никакой гарантии, что он найдет оптимальное решение. Все, что в его
силах — это контроль лучшего решения в популяции, пока не закончится
время, либо популяция не изменится в достаточной степени для продол-
жения, либо вы принудительно не остановите «Поиск решения» нажатием
кнопки Escape. Вы можете модифицировать эти критерии остановки эво-
люционного алгоритма в разделе параметров «Поиска решения».
•
Эволюционный поиск решения работает довольно медленно. А если об-
ласти допустимых значений сложные, он часто ругается, не найдя даже
места, с которого начать.
•
Если вы хотите заставить эволюционный алгоритм хорошо работать в Excel,
вам придется определить жесткие границы для каждой переменной реше-
ния. Даже если ваше решение более или менее неограниченное, вам все же
придется ограничить его каким-то большим числом.
ДРУГИЕ ИНСТРУМЕНТЫ
Большие модели не очень-то хорошо идут в Excel. Версия «Поиска решения», встроенная
в него, позволяет иметь только 100–200 переменных решений и ограничений, в зависимо-
сти от версии. Это ограничивает размер задач, с которыми вы сталкиваетесь в этой книге.
Если вы хотите и дальше пользоваться Excel, купите расширенную версию «По-
иска решения» у Frontline Systems. Еще лучше, особенно если у вас Windows, ис-
пользовать OpenSolver, как мы будем делать в конце этой главы. OpenSolver, описан-
ный в главе 1, обращается к открытому ресурсу под названием COIN Branch and Cut
(http://www.coin-or.org), который идеален для проблем оптимизации среднего
размера. Я вполне эффективно использовал OpenSolver для сотен и тысяч переменных.
Есть и программы для линейного программирования пожирнее, например Gurobi
и CPLEX. Разработчикам и остальным любителям «облачных сервисов» я особо реко-
мендую Gurobi, ибо CPLEX, принадлежащий IBM, — лучшее корпоративное решение.
Интерфейс у таких мощных промышленных программ встречается разный. К при-
меру, CPLEX идет в пакете со средой OPL, где можно писать модели на специальном
языке, имеющем прекрасную привязку к электронным таблицам. В языках программи-
рования есть множество подобных привязок для связи алгоритмов с моделями внутри
промышленных систем.
Мой любимый инструмент для встраивания в мощные системы поиска решений,
такие как СPLEX и Gurobi, называется AIMMS (www.aimms.com). Программа позво-
ляет построить свою оптимизационную модель, а затем «шлепнуть» на нее пользова-
тельский интерфейс без необходимости писать его код. Также эта программа может
общаться с электронными таблицами и базами данных.
До конца этой книги вы вполне дотянете и с Excel и его «Поиском решения». Но вам
следует знать о существовании сверхсовременных сред моделирования для решения
больших задач на случай, если ваши нужды перерастут Excel.
ЗАМЕТКА
Так вот, сегодня я намерен разрушить еще один миф: ваш свежевыжатый сок
премиум-класса, не восстановленный из концентрата, не был выжат вручную.
На самом деле, мякоть в нем, скорее всего, из одних апельсинов, сок — из дру-
гих, более того, он взят из разных бочек и смешан согласно математическим
моделям, созданным для того, чтобы удостовериться, что каждый выпитый
вами стакан имеет в итоге один и тот же вкус.
Одинаковый вкус апельсинового сока круглый год — далеко не пустяк,
с которым справится каждый. Во-первых, апельсины не зреют во Флориде
круглогодично. Во-вторых, разные сорта созревают в разное время. Сорвешь
слишком рано — вкус слишком «зеленый». Закажешь апельсины из другой
страны, где сейчас сезон — сок может быть другого цвета. Или слаще. По-
требители требуют постоянства. Может быть, для какого-нибудь Sunny D это
просто, но как достичь идеала вам с вашей кучей бочек холодного свеже-
выжатого сока?
Начнем с характеристик
Допустим, вы — аналитик, работающий в ДжусЛэнде. Ваш босс, мистер
Джус Р. Лэндингсли III (ваша компания страдает непотизмом), попросил вас
распланировать закупки сока у поставщиков на январь, февраль и март на-
ступающего года. Вместе с этим поручением мистер Лэндингсли протягивает
вам список характеристик от поставщиков, содержащий страну происхожде-
ния и сорт, доступное для заказа количество на следующие три месяца и цену,
а также стоимость пересылки за 1000 галлонов.
В списке приведены характеристики цвета сока по шкале от 1 до 10 и три
вкусовых компонента:
•
отношение Брикс/кислотность: Брикс — это мера сладости сока, так что
Брикс/кислотность — это отношение сладости к терпкости (кислотности),
что, в конце концов, и есть настоящий вкус апельсинового сока;
•
кислотность (%): Кислотность в процентах от сока приведена отдельно,
потому что это определенное количество: неважно, насколько сладок сок,
если он при этом слишком кислый;
•
вяжущий вкус (шкала 1–10): мера «неспелости» сока. Это тот горький, не-
зрелый, садовый привкус, который может закрасться в сок. Этот параметр
оценивается группой специалистов на каждом производстве по выпуску
сока по шкале 1–10.
Выбор сока для заказа на следующие три месяца зависит от ответов на сле-
дующие вопросы:
•
если вы минимизируете стоимость, сможете ли вы купить все, что захотите?
•
Сколько сока вам нужно?
•
Каковы ограничения по цвету и вкусу для каждой партии?
Возвращаемся к консистенции
С помощью вкусовых тестов и опроса покупателей ДжусЛэнд определил, как
должен выглядеть сок и каким он должен быть на вкус. Небольшой выход за пре-
делы этих характеристик — и покупатели почти наверняка сочтут ваш сок не-
настоящим, дешевым или, хуже того, восстановленным из концентрата. Фу!
Мистер Лэндингсли III предъявляет вам следующие требования.
•
Он хочет иметь план заказа по самым низким ценам на январь, февраль
и март, соответствующий ожидаемому спросу в 600 000 галлонов сока в ян-
варе и феврале и 700 000 галлонов в марте.
•
Он имеет договор со штатом Флорида, предоставляющим налоговые льготы
при условии, что компания покупает не менее 40% сока каждый месяц
у фермеров, выращивающих сорт «флорида валенсия». Нарушать договор
нельзя ни при каких условиях.
•
Отношение Брикс/кислотность (BAR) должно оставаться в пределах между
11,5 и 12,5 в смеси каждого месяца.
152 Много цифр
•
Уровень кислотности должен оставаться между 0,75% и 1%.
•
Уровень вяжущего вкуса должен быть 4 или ниже.
•
Цвет должен находиться в рамках 4,5–5,5. Не слишком темный, не слиш-
ком водянистый.
ВНИМАНИЕ
Не делите на спрос последовательно, так как вообще спрос является функцией пере-
менных решения. Решения, поделенные на решения, ужасно нелинейны!
Снижаем стандарты
В полном восторге вы несете ваш план оптимального смешивания своему на-
чальнику, мистеру Лэндингсли III. Вы объясняете, как пришли к такому варианту.
Он разглядывает бумагу с подозрением. И даже, несмотря на ваши заверения
в оптимальности плана, требует урезать стоимость еще на 5%. И объясняет свою
очевидно бессмысленную позицию спортивными аналогиями «играй всеми на-
падающими» и «выдай мне 110%».
Со спортивными аналогиями нет смысла спорить. Если именно $1 170 000 —
подходящая цифра, то пусть так и будет. Вы объясняете, что достичь этого
с имеющимися условиями качества невозможно, а он ворчит и говорит вам,
что ваша задача — «немного прогнуть реальность».
Хммм…
Вы возвращаетесь к своей таблице взволнованным.
Как можно получить смесь лучше за $1 170 000?
После разговора по душам с мистером Лэндингсли вы понимаете: стои-
мость — больше не цель. Это теперь условие! А что же цель?
Ваша новая цель, порожденная ворчанием начальника, формулируется как
понижение качества ради снижения стоимости. А способ ее достигнуть — это
вставка переменной решения в модель с тем, чтобы снизить ограничения качества.
Что ж, вперед — копируем лист Optimization Model в чистую таблицу под на-
званием Relaxed Quality. Эта задача не потребует больших изменений.
Посидите минутку и подумайте, как и что можно изменить, чтобы модель
соответствовала новым послаблениям в цели и цене. Не вставайте, пока не за-
болит голова!
Первое, что вы должны сделать, — это внести $1 170 000 как ценовое ограни-
чение в ячейку В2, прямо за старой целевой ячейкой. Также скопируйте старые
минимальные и максимальные значения вкуса и цвета в столбцы H и I соот-
ветственно. А в строки 27–30 столбца G добавьте новую переменную решения
под названием %Relaxed.
Теперь подумайте, как вы можете использовать снижение значения отношения
Брикс/кислотность в ячейке G27, чтобы понизить ограничение в 11,5. Текущее
значение этого параметра варьируется от 11,5 до 12,5, то есть разница равна 1. По-
этому расширение этого «коридора» на 10% даст нам минимальное значение в 11,4.
Следуя этому подходу, замените минимум в В27 на эту формулу:
=H27-G27*(I27-H27)
минимума (127 минус Н27). Можете скопировать эту формулу вниз до строки 30.
Точно так же примените новый максимум с послаблением в столбце F.
Что касается целевой функции, возьмите среднее из решений с послабле-
нием из G27:G30. Поместив этот расчет в ячейку D2, получаем новый лист, ко-
торый выглядит как рис. 4-25.
•
Назначить целевую ячейку D2 переменной решения, чтобы алгоритм мог
совершать над ней все необходимые действия. Не забывайте: если вы за-
дали модели цель — минимизировать, симплексный алгоритм будет пы-
таться уменьшить значение в этой ячейке насколько это возможно.
•
С помощью окна «Добавить условие» поставить следующее условие: та-
кое, что G27:G30 должны быть меньше или равны D2. D2 нужно поставить
в правую часть неравенства, чтобы разрешить Excel использовать разное
число ячеек (4 ячейки из столбца G слева и одна справа, ограничивающая
неравенство сверху). Единственный раз в этой главе вы можете исполь-
зовать разное количество ячеек в неравенстве ограничения, потому что
4. Оптимизационное моделирование 163
Теперь вы можете добавить условие, что 672 × C34 ≥ C6. Когда С6 равно нулю,
С34 может принять значение 0). А когда С6 больше нуля, то С34 принудительно
превращается в 1, чтобы поднять верхнюю границу от 0 до 672.
Чтобы применить это условие в электронной таблице, создайте новый
промежуток F34:Н44, где вы будете перемножать индикаторы слева на их
166 Много цифр
•
обе переменные — нули, равно как и индикатор и общее количество, со-
ответственно, их произведение также равно 0;
170 Много цифр
•
вы заказали сок, но решили не понижать кислотность — произведение
снова 0;
•
вы решили понизить кислотность — произведение равно общему количе-
ству сока.
•
индикатор понижения кислотности × объем, доступный для заказа;
•
заказанное количество.
Можете скопировать эту формулу для каждого сорта и месяца, получив в ре-
зультате таблицу, изображенную на рис. 4-36.
Рядом с разделом Total Reduce вычтите это значение из общего объема за-
каза в С16:Е16, чтобы получить оставшееся количество сока, не подвергшегося
деацидификации. К примеру, в ячейку G38 поместите
=C6—C38
174 Много цифр
Моделируем риски
Последнее бизнес-правило было тяжеловатым, зато проиллюстрировало, как
с помощью модели можно линеаризовать большинство задач бизнеса путем
добавления условий и переменных. Неважно, впрочем, насколько просты или
сложны были предыдущие задачи — у них есть одна общая черта: они свято
чтут вводные данные.
Эта точность не всегда соответствует реальности, в которой вынуждено
действовать большинство бизнесменов. Не все партии отвечают заявленным
176 Много цифр
70
Количество вхождений
60
50
40
30
20
10
0
1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33
Сумма четырех цифр
Рис. 4-40. Комбинирование независимых случайных переменных для иллюстрации того, как они
собираются в колоколообразную кривую
80%
70%
60%
50%
40%
30%
20%
10%
0%
1 3 5 7 9 11 13 15 17 19 21 23 25 27 29 31 33
Сумма цифр
ЗАМЕТКА
Точно так же, как в предыдущем разделе, пользователям Excel 2010 и Excel 2013 пона-
добится помощь OpenSolver. Ставьте задачу, формируйте решение, как обычно, и ис-
пользуйте кнопку выполнения OpenSolver в меню, когда дело дойдет до решения. Бо-
лее подробно OpenSolver описан в главе 1.
То же самое можно сделать и для февраля и марта в строках 80 и 81, а затем
распространить весь расчет до самого столбца CW, чтобы получить значение
этого отношения для каждого сценария.
В итоге вы получаете расчеты для каждого сценария, показанные на рис. 4-45.
для загрузки, оно может отличаться. Для моей сотни сценариев наилучшим по-
казателем, который мне удалось получить, является изменение качества на 133%
с сохранением стоимости менее $1,25 миллиона.
Ради смеха можно поднять верхнюю границу стоимости до $1,5 миллиона
и решить все снова. Получится изменение на 144%, причем цена будет сильно
недотягивать до верхней границы, оставаясь близкой к $1,3 миллиона. Видимо,
увеличение стоимости выше этого значения не дает большого резерва для
улучшения качества (решение на рис. 4-47).
Ну, вот и все! Теперь у вас есть баланс стоимости и качества, удовлетворя-
ющий условиям даже в случайных, близких к реальности ситуациях.
Подытожим
Если вы терпеливо составляли мне компанию на протяжении последних двух
моделей — браво! Эти «взламыватели мозгов» — не игрушки. На самом деле это
была, возможно, самая трудная глава книги. Дальше будет проще, честное слово!
4. Оптимизационное моделирование 185
У вас, должно быть, голова идет кругом от желания немедленно приме-
нить все эти математические премудрости в вашем бизнесе. Или, наоборот,
вы только что допили стаканчик крепкого и решили никогда больше не свя-
зываться с линейным программированием. Надеюсь все-таки на первый вари-
ант, ибо линейное программирование — чрезвычайно увлекательный инстру-
мент для развития необычайной креативности и сообразительности. Модели
с десятками миллионов переменных решений вы найдете во многих моделях
бизнеса.
•
Росс и Рейчел, разумеется;
•
Моника и Чендлер, которые, в конце концов, поженились;
•
Джоуи и Рейчел, у которых был недолгий роман, но в итоге они нашли, что
это «слишком странно»;
•
Чендлер и Рейчел, которые встречались в серии про инцидент со столи-
ком для бассейна. В этой серии Рейчел представляет, что было бы, если
бы она встречалась с Чендлером;
190 Много цифр
•
Чендлер и Фиби, которые играют в отношения и, в конце концов, вынуж-
дены поцеловаться, потому что Чендлер отказывается признать, что он
встречается с Моникой.
Росс Рейчел
Джоуи Моника
Чендлер Фиби
Довольно просто, не так ли? Вершины и ребра. Вот и все, что нужно для се-
тевого графа. Заметьте, насколько сетевые графы не похожи на графики, кото-
рые вам встречались: точечные диаграммы, линейные графики и столбчатые
диаграммы. Они — совсем другие «звери».
На рис. 5-1 изображен неориентированный сетевой граф, потому что отношения
обоюдны по определению. А вот данные, например, из Twitter будут уже ориенти-
рованным графом: я могу подписаться на вас, но вы не обязаны подписываться
на меня. Ребра ориентированного графа обычно изображаются стрелочками.
Один из минусов использования Excel для работы с сетевыми графами со-
стоит в том, что, в отличие от разнообразных графиков и диаграмм, граф нельзя
визуализировать встроенными в Excel средствами.
Так вот, в этой главе я намереваюсь отступиться от собственных правил и
использовать стороннее программное обеспечение для расчетов и визуали-
зации графов, а именно Gephi. Его подробное описание вы найдете в следу-
ющем разделе. Вы вправе игнорировать в этой главе все, что связано с Gephi,
если хотите. Весь поиск и добыча сетевых данных могут быть выполнены
без визуализации сети в Gephi, я прибегаю к нему просто потому, что оно
мне нравится.
Но если вы хотите работать с таким типом графов, то кроме визуализации вам
понадобится числовое представление данных. Одно из подобных интуитивных
5. Кластерный анализ, часть II 191
NODEXL
Если вы пользуетесь Excel 2007 или 2010, то Social Media Research Foundation выпу-
стила для вас шаблон NodeXL, благодаря которому вы можете строить сетевые графы
в Excel. Я не буду его описывать в этой книге, потому что век развития программного
обеспечения только начинается и этот шаблон не совместим с LibreOffice и Excel 2011
для MacOS. Если вам интересно, можете поискать NodeXL для вашей системы здесь:
http://www.smrfoundation.org/nodexl/.
Мне кажется, что импорт матрицы смежности в Gephi имеет один лишний шаг.
Почему? Потому что Gephi не поддерживает матрицы смежности, разделенные
запятыми. Каждое значение должно быть отделено от другого точкой с запятой.
Несмотря на предостережение Курта Воннегута в «Человеке без родины»:
«Не пользуйтесь точкой с запятой. Это гермафродит-трансвестит, не представ-
ляющий из себя абсолютно ничего. Все, на что способен этот знак — показать,
что вы учились в колледже», Gephi проигнорировал этот дельный совет. Сле-
дуйте за мной — и я проведу вас целыми и невредимыми через процесс импорта.
Я создал таблицу FriendsGraph.xlsx, доступную на сайте книги www.wiley.
com/go/datasmart. Впрочем, при желании можете сами немного повозиться
с небольшим набором данных и матрицей смежности с рис. 5-2.
Первое, что необходимо сделать, чтобы импортировать этот граф в Gephi —
это сохранить его как CSV, файловый формат, являющийся обычным текстом,
разделенным запятыми. Для этого нажмите «Сохранить как» в Excel и выберите
CSV из списка форматов. Имя файла будет FriendsGraph.csv. При сохранении
Excel может ругаться на вас и выдавать различные предупреждения, но я раз-
решаю вам их игнорировать.
После экспорта файла все запятые замените на точки с запятой. Для этого
откройте файл в текстовом редакторе (например, в Блокноте, если вы исполь-
зуете Windows, или Текстовый редактор, если у вас MacOS) и с помощью «Найти
и заменить» поменяйте запятые на точки с запятой. Сохраните файл. На рис. 5-3
этот процесс показан в текстовом редакторе.
Визуализация графа
Удостоверьтесь, что в верхнем левом углу программы выбрана вкладка Overview.
Таким образом, ваш Gephi должен выглядеть примерно как мой на рис. 5-6. Вер-
шины и ребра беспорядочно разбросаны по экрану. Увеличение на ужасном
минимуме, так что вы еле различаете контуры. Изначально вы рассчитывали
на нечто более удобоваримое, не так ли?
Причешем немного наш граф. Можно приблизить изображение колесиком
мышки и двигать его, удерживая правую клавишу.
Нажимая на кнопку Т внизу окна просмотра, вы можете добавить названия
вершинам графа, чтобы знать, какая вершина к какому персонажу относится.
После увеличения, подгонки и добавления имен граф выглядит как на рис. 5-7.
5. Кластерный анализ, часть II 195
Нужно, однако, чтобы он выглядел еще лучше. К счастью, у Gephi есть пачка
алгоритмов для автоматизации этого процесса. Многие из них используют та-
кие средства, как гравитация между соединенными вершинами и отталкивание
между несоединенными для более удачного расположения элементов. Раздел
отображения в Gephi — это нижнее левое окно панели обзора. Не стесняйтесь
спонтанно выбирать пункты из этого меню, чтобы попробовать разные режимы.
ЗАМЕТКА
Имейте в виду, что некоторые алгоритмы внешнего вида могут сжать или растянуть
ваш граф так, что придется увеличивать или уменьшать изображение, чтобы увидеть
его целиком. Это относится и к названиям вершин — их размеры будут меняться со-
вершенно хаотично, но, к счастью, можно использовать Label Adjust — функцию под-
гонки названий под выпадающим меню внешнего вида графа.
Степень вершины
Одно из понятий, весьма важное для понимания данной главы, — это степень
вершины, то есть количество ребер, связанных с данной вершиной. У Чендлера
степень равна 3, в то время как у Фиби — всего 1. Эти степени можно исполь-
зовать в Gephi для изменения размера вершин.
Приятная картинка
Хотя эти картинки неплохо выглядят, вы вряд ли решитесь повесить их на стену.
Чтобы подготовить граф к печати, зайдите на панель просмотра (Preview) вверху
экрана.
Под вкладкой настроек просмотра (Preview Setting) выберите пресет Black
Background из выпадающего меню пресетов (теперь вы больше похожи на ха-
кера) и нажмите на кнопку обновления страницы (Refresh) в нижнем левом
углу окна.
Gephi нарисует ваш граф потрясающе красивым и плавным (рис. 5-11).
Обратите внимание, как вместе с самими вершинами изменились размеры
подписей. Они просто великолепны! Ребра этого графа показались мне не-
много тонковатыми, так что я изменил их толщину в левой панели настроек
с 1 до 3.
Если вы хотите превратить это изображение в графический файл (к примеру,
файл.png), нажмите кнопку Export в левом нижнем углу раздела настроек об-
зора. После этого вы можете разместить свой граф на сайте, вставить в пре-
зентацию PowerPoint и даже в книгу про науку о данных!
Таблица Excel, использованная в этой главе, доступна для скачивания на сайте книги,
www.wiley.com/go/datasmart. Она содержит исходные данные, на случай если
вы хотите работать с ней. Если нет — просто следите за мной, используя уже запол-
ненные листы.
•
в конце главы 2 вы обнаружили, что в случае с данными о заказах асимме-
тричное подобие и измерения расстояний между покупателями работают
гораздо лучше евклидова расстояния. Вам важны заказы, а не их отсутствие;
•
проведя ребро между двумя покупателями, вы руководствуетесь сходством
этих покупателей, а не различиями между ними, поэтому данный расчет
нужно «перевернуть». Эта близость заказов видна благодаря близости ко-
синусов, поэтому вам нужно создать матрицу близости, то есть смежно-
сти, в противовес матрице расстояний из главы 2.
=SUMPRODUCT(OFFSET(Matrix!$H$2:$H$33,0,Similarity!C$1),
OFFSET(Matrix!$H$2:$H$33,0, Similarity!$A3))/(SQRT(SUM
(OFFSET(Matrix!$H$2:$H$33,0, Similarity!C$1)))*SQRT(SUM
(OFFSET(Matrix!$H$2:$H$33,0, Similarity!$A3))))
=СУММПРОИЗВ(СМЕЩ(Matrix!$H$2:$H$33,0,Similarity!C$1),
СМЕЩ(Matrix!$H$2:$H$33,0,Similarity!$A3))/(КОРЕНЬ(СУММ
(СМЕЩ(Matrix!$H$2:$H$33,0,Similarity!C$1)))*КОРЕНЬ(СУММ
(СМЕЩ(Matrix!$H$2:$H$33,0,Similarity!$A3))))
IF(C$1=$A3,0,SUMPRODUCT(OFFSET(Matrix!$H$2:$H$33,0,Similarity!
C$1),OFFSET(Matrix!$H$2:$H$33,0,Similarity!$A3))/(SQRT
(SUM(OFFSET(Matrix!$H$2:$H$33,0,Similarity!C$1)))*SQRT(SUM
(OFFSET(Matrix!$H$2:$H$33,0,Similarity!$A3)))))
ЕСЛИ(C$1=$A3,0,СУММПРОИЗВ(СМЕЩ(Matrix!$H$2:$H$33,0,Similarity!
C$1),СМЕЩ(Matrix!$H$2:$H$33,0,Similarity!$A3))/(КОРЕНЬ(СУММ
(СМЕЩ(Matrix!$H$2:$H$33,0,Similarity!C$1)))*КОРЕНЬ(СУММ
(СМЕЩ(Matrix!$H$2:$H$33,0,Similarity!$A3)))))
5. Кластерный анализ, часть II 207
Итак, теперь, когда у вас есть формула, которую можно перетаскивать куда
угодно, возьмите ячейку С3 за нижний правый угол и растяните вправо до СХ3
и вниз до СХ102.
В итоге в вашем распоряжении — матрица близости косинусов, которая по-
казывает, какие покупатели похожи. Применяя условное форматирование, по-
лучаем результат, показанный на рис. 5-16.
Эта функция выдает нам 2950 ребер, созданных из исходных 324 сделок.
Что, если оставить только 20% с наибольшими значениями? Каким для этого
должно быть r? Попробуем прикинуть: при 2950 ребрах 80-м перцентилем
по близости будет примерно то, что соответствует 590-му ребру. Так что под
расчетом количества ребер в С105 можно использовать функцию LARGE/НАИ-
БОЛЬШИЙ, чтобы узнать значение 590-го по порядку уменьшения значений ре-
бра (рис. 5-18):
=LARGE(C3:CX102,590)
=НАИБОЛЬШИЙ(C3:CX102,590)
Функция выдает значение 0,5. Таким образом, можно оставить 20% ребер
с наибольшими значениями, просто отбросив все, значения близости косину-
сов которых меньше 0,5.
Теперь, когда с графа r-окрестности убрано все лишнее, сборка матрицы
смежности будет очень простой. Создайте новый лист в вашей таблице и на-
зовите его r-NeighborhoodAdj, а затем вставьте имена покупателей в столбец А
и строку 1, чтобы получилась таблица.
В любой ячейке этой таблицы нужно поставить 1, если значение близости из
предыдущей таблицы Similarity больше 0,5. Таким образом, к примеру, в ячейке В2
можно использовать такую формулу:
=IF(Similarity!C3>=Similarity!$C$105,1,0)
=ЕСЛИ(Similarity!C3>=Similarity!$C$105,1,0)
Отлично! Итак, теперь у вас есть граф, который можно охватить взглядом.
И на деле простое отображение графа и разглядывание его — зрительное раз-
деление на группы — само по себе не так уж плохо. Вы взяли многомерные дан-
ные и дистиллировали их в нечто плоское, вроде пола актового зала из главы 2.
Но если бы у вас были тысячи покупателей, а не сотни, глаза бы уже не так по-
могали. Конечно, даже сейчас на графе есть такие покупатели, которых трудно
сгруппировать. В одной ли они группе или в нескольких?
И в этот самый момент в игру вступает модульная максимизация. Алгоритм
использует отношения между людьми на графе, чтобы делать предположения
об их принадлежности к той или иной группе, даже если граф не умещается
в ваше поле зрения.
Но что со штрафными?
Вот где алгоритм модулярной максимизации становится по-настоящему
креативным. Вспомним наш граф «Друзей», изображенный на рис. 5-1.
Модулярная максимизация основывает свои штрафные на следующем ут-
верждении, в котором фигурируют две вершины:
Если бы взяли этот граф и стерли бы на нем середины всех ребер, а затем
соединили бы их заново случайным образом несколько раз, сколько бы в этом
случае ребер получилось между двумя вершинами?
Росс Рейчел
Джоуи Моника
Чендлер Фиби
Росс Рейчел
Джоуи Моника
Чендлер Фиби
1 3
10 10
Росс Рейчел
1 1
10 10
Джоуи Моника
3 1
10 10
Чендлер Фиби
1 3
Вероятность получения Росс-Рейчел:
10 10
# пеньков Росса # пеньков Рейчел 1 3
2 =2
Росс Рейчел 2 * # ребер 2 * # ребер 10 10
1 1
10 10
В этом случае тоже получается 14, и это то, чего мы ожидали, так как граф
неориентированный.
5. Кластерный анализ, часть II 217
что оказывается равным 0,245. Сводя все вместе, получаем 1 – 0,245 = 0,755.
5. Кластерный анализ, часть II 219
Переходим к кластеризации!
Теперь у вас есть все необходимые значения. Все, что вам нужно сделать — это
запустить оптимизационную модель, чтобы найти оптимальное распределение
по группам.
Буду заранее честен с вами. Нахождение оптимальных групп с помощью
модулярности графа требует несколько более сложной подготовки оптимиза-
ции, чем вы встречали в главе 2. Подобные задачи часто решаются сложной
эвристикой, вроде популярного лувенского метода (подробнее здесь: http://
perso.uclouvain.be/vincent.blondel/research/louvain.html), но в этой
книге я обещал не заставлять вас писать код, так что придется обходиться
«Поиском решения».
Мы будем атаковать задачу с помощью метода под названием разделяющая
кластеризация, или иерархическое разбиение. Для начала необходимо найти наи-
лучший способ разделения графа на две группы. Затем мы разделим эти группы
на четыре, и т. д., до тех пор, пока «Поиск решения» не заключит, что наилучший
способ максимизации модулярности — это перестать делить группы.
ЗАМЕТКА
Деление 1
Итак, мы начинаем наш процесс разделяющей кластеризации с разделения
графа на две группы, чтобы максимизировать модулярность.
Создайте новый лист под названием Split1 и вставьте покупателей в стол-
бец А. Принадлежность каждого покупателя к группе будет обозначена
в столбце В, который нужно назвать Community. Так как вы делите граф попо-
лам, пусть этот параметр будет бинарной переменной решения в «Поиске ре-
шения», где значение 0/1 будет означать принадлежность к группе 0 или 1. Ни
одна из групп не лучше другой. Нет ничего плохого в том, чтобы быть в 0 группе.
то его часть общей модулярности будет суммой всех значений ячеек его строки
во вкладке Scores, покупатели в которых также отнесены к группе 1.
Рассмотрим, как добавить эту модулярность в формулу. Если Адамс в группе 1,
то вам нужно сложить все значения ячеек из строки 2 вкладки Scores, которые
относятся к другим покупателям, также попавшим в группу 1. Так как мы при-
сваиваем только 0/1, можно использовать SUMPRODUCT/СУММПРОИЗВ для умно-
жения вектора группы на вектор модулярности и сложения результата.
Хотя значения модулярностей расположены слева направо, в оптимиза-
ционной модели они идут сверху вниз, так что здесь придется использовать
TRANSPOSE/ТРАНСП (что, в свою очередь, означает использование формулы
массива):
{=SUMPRODUCT(B$2:B$101,TRANSPOSE(Scores!B2:CW2))}
{=СУММПРОИЗВ(B$2:B$101,ТРАНСП(Scores!B2:CW2))}
Все, что вы делаете — это заставляете модулярность Адамса быть меньше или
равной правильному расчету и удаляете другую формулу из рассуждения, за-
вышая ее значение. Это взломанная парнями из подворотни функция IF/ЕСЛИ.
Таким образом, столбец С вы можете сделать столбцом модулярности, ко-
торая будет переменной решения, а в столбцы D и Е вашей электронной та-
блицы вставить эти две формулы в качестве верхних границ модулярности
(рис. 5-27).
Обратите внимание, что в значениях принадлежности к группам в формуле
используются абсолютные ссылки, так что без проблем растягивайте формулу
вниз — ничего не изменится.
222 Много цифр
Деление 2: электролатино!
Разделим эти группы так, как делят ячейку. Начнем с копирования листа Split1
в новый лист и переименования его в Split2.
Первое, что здесь нужно сделать — это вставить новый столбец после столбца
со значениями принадлежности к группам (В). Назовите этот новый столбец С
Last Run и скопируйте туда значения из В. Таким образом получается лист,
изображенный на рис. 5-31.
В этой модели подход тот же самый: каждому покупателю присваива-
ется 1 или 0. Но стоит помнить, что если два покупателя получают в этот
раз 1, это вовсе не значит, что они находятся в одной группе. Если в пре-
дыдущем делении они могли находиться в разных группах, то этот принцип
сохраняется.
Другими словами, единственное значение модулярности, которое может по-
лучить Адамс, будучи, скажем, в группе 1–0, зависит от покупателей, отнесенных
в группу 0 в первом делении и в группу 1 во втором. Таким образом, нам необ-
ходимо поменять верхние границы расчета модулярности. Расчет в столбце Е
(здесь показан в Е2) теперь требует сверки с результатами предыдущего деле-
ния в столбце С:
{=SUMPRODUCT(B$2:B$101,IF(C$2:C$101=C2,1,0),
TRANSPOSE(Scores!B2:CW2))}
{=СУММПРОИЗВ(B$2:B$101,ЕСЛИ(C$2:C$101=C2,1,0),
ТРАНСП(Scores!B2:CW2))}
перед запуском, так что в этом нет ничего нелинейного. Добавьте оператор
IF/ЕСЛИ в часть формулы с «большим М», чтобы сделать окончательный рас-
чет в столбце Е:
SUMPRODUCT(B$2:B$101,IF(C$2:C$101=C2,1,0),TRANSPOSE
(Scores!B2:CW2))+(1-B2)*SUMPRODUCT(IF(C$2:C$101=C2,1,0),
TRANSPOSE(ABS(Scores!B2:CW2)))
СУММПРОИЗВ(B$2:B$101,ЕСЛИ(C$2:C$101=C2,1,0),ТРАНСП
(Scores!B2:CW2))+(1-B2)ЧСУММПРОИЗВ(IF(C$2:C$101=C2,1,0),
ТРАНСП(ABS(Scores!B2:CW2)))
И… деление 3: возмездие
Хорошо, но стоит ли нам останавливаться на этом или стоит продолжить? Един-
ственный способ узнать ответ — поделить еще раз. Если результат не будет
лучше, чем 0,564 — значит, это конец.
Начнем с создания листа Split3, переименования Last Run в Last Run 2
и вставки нового Last Run в столбец С. Затем скопируем значения из В в С.
Добавим еще пару операторов IF//ЕСЛИ в верхние границы, чтобы прове-
рять принадлежность к группе в предыдущем делении. Например, F2 превра-
щается в следующее:
=SUMPRODUCT(B$2:B$101,IF(D$2:D$101=D2,1,0),IF(C$2:C$101=C2,1
,0),TRANSPOSE(Scores!B2:CW2))+(1-B2)*SUMPRODUCT
(IF(C$2:C$101=C2,1,0),IF(D$2:D$101=D2,1,0),
TRANSPOSE(ABS(Scores!B2:CW2)))
=СУММПРОИЗВ(B$2:B$101,
ЕСЛИ(D$2:D$101=D2,1,0),ЕСЛИ(C$2:C$101=C2,1,0),
ТРАНСП(Scores!B2:CW2))+(1-B2)*СУММПРОИЗВ
(ЕСЛИ(C$2:C$101=C2,1,0),ЕСЛИ(D$2:D$101=D2,1,0),
ТРАНСП(ABS(Scores!B2:CW2)))
228 Много цифр
=BIN2DEC(CONCATENATE(B2,C2))
=ДВ.В.ДЕС(СЦЕПИТЬ(B2,C2))
{=СУММПРОИЗВ(ЕСЛИ(Communities!$D$2:$D$101=
TopDealsByCluster!H$1,1,0),ТРАНСП(Matrix!$H2:$DC2))}
Обратите внимание, как похоже это решение на уже найденное нами в главе 2.
Но тогда мы пользовались кардинально другой методологией, сохраняя вектор
5. Кластерный анализ, часть II 233
Подытожим
В главе 2 мы рассматривали кластеризацию по k-средним. Используя те же
самые данные, в этой главе вы сражались с сетевыми графами и окунались в
кластеризацию через максимизацию модулярности. Вы уже должны довольно
неплохо себя чувствовать в добыче данных, и даже обрести некоторую уверен-
ность. Конкретизируем освоенные вами навыки:
•
визуальное представление сетевого графа, а также отображение его в виде
матриц смежности и инцидентности;
•
загрузка сетевого графа в Gephi для пущей уверенности в графической
несостоятельности Excel;
•
удаление ребер из сетевых графов с помощью графа r-окрестности. Также
вы познакомились с концепцией KNN-графа, к которой я вам рекомендую
вернуться и поразмыслить над ней подольше;
•
определение степени вершины и модулярности графа, а также способы
расчета «очков» модулярности для группировки двух вершин;
•
максимизация модулярности графа с использованием линейной оптими-
зационной модели и разделительной кластеризации;
•
максимизация модулярности графа в Gephi и экспорт результатов.
5. Кластерный анализ, часть II 239
А теперь вам наверняка любопытно, чего ради я окунул вас в процесс мак-
симизации модулярности графа, если Gephi способна сделать это за вас?
Вспомните, цель этой книги — не слепое нажатие клавиш, без осознания
того, что же вы делаете. Теперь вы научились конструировать и подготавли-
вать данные для определения кластеров. И знаете, как работает определение
групп на графе. Вы это сделали. Так что в следующий раз, столкнувшись с этим
«зверем», вы будете знать, что происходит по ту сторону экрана. Этот уровень
понимания процесса неоценим.
Хотя Gephi и является одним из лучших мест для подобного анализа, вам мо-
жет потребоваться место для написания программного кода по данным графа,
такое как библиотека igraph, которая имеет привязки к R и Python и велико-
лепно подходит для работы с сетевыми графами.
Также стоят упоминания базы данных графов Neo4J и Titan. Эти базы спе-
циально разработаны для хранения данных графов и последующих этапов до-
работки, независимо от сложности графа — интересует ли вас что-то простое,
вроде «отображения любимых фильмов друзей Джона» или что-нибудь по-
сложнее, вроде «нахождения кратчайшего путина Facebook от Джона до Ке-
вина Бейкона».
Ну вот и все. Идите вперед, составляйте графы, находите группы!
Бабушка контролируемого
6 искусственного
интеллекта — регрессия
Не обольщайтесь!
Люди, не знающие принципа работы модели ИИ, часто испытывают смесь вос-
торга и ужаса, когда слышат, что те умеют предсказывать будущее. Но, пере-
фразируя известный фильм 1992 года «Тихушники», взволнованных можно успо-
коить: «Не обольщайтесь — он не настолько умен».
Почему? Потому что модель ИИ не умнее суммы своих частей. Проще го-
воря, вы скармливаете контролируемому алгоритму ИИ данные за некий период
времени, к примеру, по заказам в Target, и говорите ему: «Эй, вот это заказали
точно беременные, а вон то — не очень». Алгоритм «пережевывает» данные и «вы-
плевывает» модель. Потом вы можете загрузить в эту модель данные о заказах
покупателей и спросить: «А вот эта покупательница беременна?», и модель от-
ветит: «Нет, это 26-летний оболтус, живущий у матери в подвале».
Это, конечно, очень помогает, но все же модель — не волшебница. Она про-
сто технично превращает данные о произошедших событиях в формулу или
набор правил, которые затем использует для предсказания событий в будущем.
Как мы видели на примере «наивного Байеса» в главе 3, эффективной модель
делает ее способность вспоминать эти данные и ассоциированные с ними пра-
вила принятия решения, а также вероятности и коэффициенты.
Наш неискусственный интеллект занимается этим всю нашу жизнь. К при-
меру, имея личные данные о моей жизни, мой мозг знает: если я съем огром-
ный бутерброд с потемневшими ростками люцерны, то через несколько часов
мне с высокой вероятностью станет плохо. Я взял данные из прошлого (о том,
что отравился) и обучил с их помощью свой мозг, так что теперь у меня есть
правило, формула, модель — называйте как хотите: темные ростки = гастроэн-
терологический кошмар.
В этой главе мы будем применять две разные регрессионные модели, про-
сто чтобы посмотреть, насколько прямолинейным может быть ИИ. Регрес-
сия — бабушка контролируемого предсказательного моделирования. Первые
исследования с ее помощью были проведены еще в XIX веке. Она — старушка,
но в этом ее сила: у нее была масса времени, чтобы развить во всех областях
своего применения математическую точность, которой недостает некоторым
новым технологиям ИИ. В противоположность макгайверовскому ощущению
6. Бабушка контролируемого искусственного интеллекта — регрессия 243
•
пол владельца учетной записи — мужской/женский/не указано; фамилию
можно сравнить с данными переписи населения;
•
адрес владельца учетной записи — частный дом, квартира или абонент-
ский ящик;
•
недавно заказывал тест на беременность;
•
недавно заказывал противозачаточные;
•
недавно заказывал средства женской гигиены;
•
недавно заказывал препараты с фолиевой кислотой;
•
недавно заказывал витамины для беременных;
•
недавно заказывал DVD йоги для беременных;
•
недавно заказывал подушку для тела;
•
недавно заказывал имбирный эль;
6. Бабушка контролируемого искусственного интеллекта — регрессия 245
•
недавно заказывал браслеты от укачивания;
•
регулярно заказывал сигареты до недавнего времени, затем перестал;
•
недавно заказывал сигареты;
•
недавно заказывал продукты для бросающих курить (жвачку, пластырь
и т. д.);
•
регулярно заказывал вино до недавнего времени, затем перестал;
•
недавно заказывал вино;
•
недавно заказывал одежду для беременных или кормящих.
Такая балансировка обучающих данных внесет в них некоторый сдвиг — модель «ре-
шит», что беременность встречается гораздо чаще, чем на самом деле. Но это не проб-
лема, потому что в данном случае нас не интересует настоящая вероятность забереме-
неть. Как явствует ниже, главное — найти точку пересечения «очков» по беременности,
выданных моделью, между положительными и ложноположительными результатами.
Рис. 6-2. Вкладка Training Data w Dummy Vars с новыми столбцами для фиктивных переменных
=IF(‘TrainingData’!A2=”M”,1,0)
=ЕСЛИ(‘TrainingData’!A2=”M”,1,0)
Вероятность того,
что я буду чихать у вас в гостях
100%
Вероятность чихания
80%
60%
40%
20%
0%
0 1 2 3 4 5
Количество кошек
Вероятность того,
что я буду чихать у вас в гостях
100%
y = 0,1529x + 0,0362
Вероятность чихания
80%
60%
40%
20%
0%
0 1 2 3 4 5
Количество кошек
Другими словами, если х равен нулю, то линейная модель думает, что у меня
есть 3–4%-ный шанс чихнуть и за каждую кошку щедро дает 15% сверху.
Начальная точка графика на оси вероятности расположена на уровне 3–4%,
что называется начальным отрезком, или свободным членом функции, а 15%
за кошку — коэффициент переменной кошек. Предположения такого рода не тре-
буют ничего, кроме будущих данных, которые затем комбинируются с коэф-
фициентом и начальным отрезком модели.
На самом деле, при желании вы можете скопировать из графика формулу
«= 0,1529x + 0,0362» и вставить ее в ячейку, чтобы делать прогнозы, подставляя
вместо x подходящие числа. К примеру, в будущем я зайду в дом с тремя с по-
ловиной кошками внутри (бедняга Тимми потерял свои задние лапы в лодоч-
ной аварии), затем вычислю «линейную комбинацию» коэффициентов и своих
данных, добавлю начальный отрезок и получу свой прогноз:
0,1529 * 3,5 cats + 0,0362 = 0,57
252 Много цифр
57%-ный шанс чихнуть! Это является моделью ИИ в том смысле, что мы взяли
независимую переменную (кошек), зависимую переменную (чихание) и попро-
сили компьютер описать их взаимоотношения формулой, которая больше всего
похожа на данные о событиях в прошлом.
Теперь вам, наверное, интересно, как компьютер догадался, какая у этих
данных линия тренда. Она неплохо выглядит, но откуда он знает, как? Выра-
жаясь более человеческим языком, компьютер искал такую линию тренда, ко-
торая бы лучше всего подходила к данным, то есть чтобы сумма квадратов от-
клонений от данных была минимальной.
Чтобы понять, зачем нам сумма квадратов отклонений и что она означает,
подставим в уравнение линии тренда одну кошку:
0,1529 * 1 cat + 0,0362 = 0,1891
Обучающие данные дают нам здесь вероятность 20%, а не 18,91. Таким образом,
отклонение линии тренда в этой точке от данных равна 1,09%. Величина отклоне-
ния возводится в квадрат, чтобы ее значение было положительным, независимо
от того, по какую сторону от линии тренда оказалась наша точка. 1,09% в ква-
драте дают 0,012%. А если мы теперь сложим все квадраты отклонений от всех
известных нам точек обучающих данных, у нас получится сумма квадратов от-
клонений (которую часто называют просто суммой квадратов). И это именно
то, что Excel минимизирует, когда подгоняет линию тренда под график чихания.
Хотя в ваших данных из РитейлМарта слишком много измерений, чтобы де-
лать из них точечную диаграмму, в следующих разделах мы будем подгонять
к нашим данным точно такую же линию.
ПОДСКАЗКА
Кроме того, вы можете выделить столбец W, кликнуть на нем правой клавишей мышки,
выбрать «Форматирование ячеек» и отформатировать значения в них как числа с двумя
знаками после запятой, что впоследствии убережет вас от сердечного приступа при
виде их огромного количества.
Вы можете растянуть эту ячейку вниз на весь столбец, чтобы у каждого по-
купателя был свой расчет отклонений.
А теперь добавьте ячейку над прогнозами в Х1 (обозначенную в W1 как
Sum Squared Error — сумма квадратов отклонений), в которой будет подсчи-
тываться сумма значений столбца квадратов отклонений с помощью следу-
ющей формулы:
=SUM(X8:X1007)
=СУММА(X8:X1007)
СПРАВКА
ЗАМЕТКА
Следующий раздел — самый замысловатый во всей книге. Он, без сомнения, содержит
самые сложные вычисления — расчет стандартного отклонения коэффициентов мо-
дели. Я постарался объяснить все как можно доходчивее, но некоторые вычисления
требуют объяснений на уровне, соответствующем сложности текста. А я не хочу здесь
отвлекаться на курс лекций по линейной алгебре.
Постарайтесь вникнуть в эти понятия насколько возможно. Применяйте их на прак-
тике. А если хотите узнать больше — возьмите учебник по математической статистике
начального уровня (к примеру, «Статистика простым языком» — Statistics in Plain English
by Timothy C. Urdan [Routledge, 2010]).
Если вы все же застрянете — знайте, что к этой главе в остальной книге ничего
не привязано. Пропустите ее, а потом вернитесь, если понадобится.
260 Много цифр
Критерий Фишера:
статистическая значимость подгонки
Частенько при анализе подгонки регрессии люди останавливаются на R-квадрате:
«О, неплохо выглядит! Ну все, хватит!»
Не делайте так.
R-квадрат показывает нам лишь то, насколько хорошо подогнана модель.
Но он не дает никакой информации о статистической значимости подгонки.
Это просто, особенно в случаях с рассеянными данными (всего несколько
точек) — получить модель, которая подогнана достаточно хорошо, но эта под-
гонка статистически не значима, то есть выраженное ею отношение между от-
личительными признаками и независимыми переменными может иметь очень
отдаленное отношение к реальности.
262 Много цифр
Может быть, то, что ваша модель подходит — просто случайность? Внезап-
ная удача? Чтобы модель была статистически значимой, нужно отсеять все
случайные совпадения. Представим же на мгновение, что вся наша модель —
полнейшая случайность. Что вся подгонка — результат удачного выбора из 1000
случайно отобранных анкет РитейлМарта. Такое предположение в стиле адво-
ката дьявола называется нулевой гипотезой.
Обычно нулевая гипотеза отвергается, если есть вероятность подогнать мо-
дель хотя бы на 5%. Эта вероятность часто называется величиной p.
Для ее вычисления мы проводим проверку на критерий Фишера. Мы берем
три параметра модели и создаем с их помощью распределение вероятности
(для тех, кто забыл, что такое распределение вероятности — посмотрите об-
суждение нормального распределения в главе 4). Вот эти три параметра:
•
количество коэффициентов модели — в нашем случае 20 (19 отличитель-
ных черт плюс свободный член);
•
степени свободы — это количество вариантов данных за вычетом коли-
чества коэффициентов модели;
•
F-статистика — отношение «понятной» части суммы квадратов к «непо-
нятной» (Х3/Х1 в таблице), умноженное на отношение количества степе-
ней свободы к количеству зависимых переменных.
6. Бабушка контролируемого искусственного интеллекта — регрессия 263
Теперь у вас есть все, что нужно для подсчета статистики каждого коэффи-
циента (такого же, как и расчет F-статистики в предыдущем разделе). Мы бу-
дем производить проверку по двустороннему критерию, то есть рассчитывать
вероятности получения коэффициента, по меньшей мере, такой же величины,
положительной или отрицательной, если на самом деле между отличием и за-
висимой переменной нет никакой связи.
T-статистика для этой проверки может быть рассчитана в строке 4 как аб-
солютное значение коэффициента, нормализированного по его стандартному
отклонению. Для признака Male это будет выглядеть так:
=ABS(B2/B3)
Делаем прогнозы
на основании новых данных и измеряем результат
Последний раздел был целиком посвящен статистике — своего рода лабора-
торная работа. Это, конечно, не самое веселое, что вы делали в своей жизни,
но умение проверять значимость и качество подгонки — важные навыки. А те-
перь пришло время устроить полевые испытания нашей модели и повеселиться!
6. Бабушка контролируемого искусственного интеллекта — регрессия 271
Точно так же, как во вкладке Linear Model, пропустите этот набор через мо-
дель, подставляя новые данные в линейную комбинацию данных покупателей
и коэффициентов, и затем прибавляя свободный член.
272 Много цифр
•
действительно положительные — отнесение беременного покупателя
к беременным;
•
действительно отрицательные — отнесение «не-беременного» покупа-
теля к не беременным;
•
ложноположительные (также называемые ошибками I рода) — отнесе-
ние «не очень беременного» покупателя к беременным. По моему опыту,
конкретно это ложноположительное предположение очень обижает при
личном контакте;
•
ложноположительные (также называемые ошибками II рода) — неспо-
собность определить беременного покупателя как такового. Это не так
обидно, как подсказывает мой опыт.
Избирательность
(доля действительно отрицательных результатов)
Еще одна мера качества модели, которая растет вместе с пороговым значе-
нием, — это избирательность. Избирательность, также называемая долей дей-
ствительно отрицательных результатов, выражается количеством покупателей,
276 Много цифр
=COUNTIFS(‘TestSet’!$V$2:$V$1001,”<”&B2,‘TestSet’!$U$2:
$U$1001,”=0”)/COUNTIF(‘TestSet’!$U$2:$U$1001,”=0”)
=СЧЁТЕСЛИМН(‘TestSet’!$V$2:$V$1001,”<”&B2,‘TestSet’!$U$2:
$U$1001,”=0”)/СЧЁТЕСЛИ(‘TestSet’!$U$2:$U$1001,”=0”)
Копируя эту формулу на весь список, вы можете увидеть, что по мере воз-
растания граничного значения, уменьшается количество ложноположительных
результатов. Другими словами, вы совершаете меньше ошибок I рода (называя
беременными покупателей, которые таковыми не являются).
278 Много цифр
Кривая ошибок
100%
90%
80%
положительные значения
70%
Действительно
60%
50%
40%
30%
20%
10%
0%
0%
%
0%
10
20
30
40
50
60
70
80
90
10
Ложноположительные значения
1
0,9
На выходе число от 0 до 1
0,8
0,7
0,6
0,5
0,4
0,3
0,2
0,1
0
–5 –4 –3 –2 –1 0 1 2 3 4 5
Любое значение
Если скопировать эту формулу на весь столбец, можно увидеть, что все но-
вые значения находятся между 0 и 1 (рис. 6-28).
Так или иначе, большая часть прогнозов оказывается близка к среднему,
между 0,4 и 0,7. А все из-за того, что мы не оптимизировали коэффициенты
на листе Linear Model для нашей новой модели. Так что оптимизацию при-
дется повторить.
Поэтому мы снова заполняем столбец с квадратом отклонения и далее
столбцы до Y, но теперь в расчет отклонения включаем прогнозы линейной
функции из столбца Х:
=(V5-X5)^2
284 Много цифр
ЗАМЕТКА
Ваши значения в столбцах W и X могут немного отличаться от моих, так как это —
коэффициенты модели, которые мы искали с помощью эволюционного алгоритма
на предыдущем листе.
=СУММПРОИЗВ(‘LogisticRegression’!B$2:T$2,’TestSet’!A2:S2)+
‘LogisticRegression’!U$2
ЗАМЕТКА
Выберите граничные значения от 0 до 1 с шагом в 0,05 (на самом деле сто-
ило бы 1 поменять на 0,999 или около того, чтобы избавить формулу точности
от деления на 0). Все строки ниже 22 можно очистить, а параметры качества
работы нужно изменить только в том, чтобы они обращались к столбцу Х ли-
ста Test Set, вместо столбца V. Таким образом у нас получается лист, изобра-
женный на рис. 6-33.
Вы можете построить кривую ошибок в точности так же, как и раньше. Од-
нако, чтобы сравнить логистическую регрессию с линейной, нужно добавить
ее ряд данных для параметров каждой модели (клик правой клавишей мыши
на графике и выбор опции «Выбрать данные»). На рис. 6-34 хорошо видно, что
кривые ошибок обеих моделей буквально сливаются.
При том что качество моделей практически идентично, вы можете скло-
ниться к использованию логистической регрессии разве что по причине прак-
тичности — ведь на выходе получаются текущие вероятности принадлежности
к классам от 0 до 1. Это приятнее, при прочих равных.
Но!
Испытание различных моделей ИИ — не самая важная часть проекта моделирова-
ния ИИ. Это последний этап, вишенка на торте. И именно в этот момент сайты вроде
Kaggle.com (сайт состязаний по моделированию ИИ) делают все не так.
Вы получаете гораздо большую отдачу, когда тратите время на выбор хороших
данных и отличительных признаков для вашей модели. К примеру, в задаче, приве-
денной в этой главе, вам бы лучше было обойтись тестированием возможных отли-
чий вроде «покупатель перестал покупать мясо на ужин из-за боязни пастереллёза»
и проверкой обучающих данных, чем тестированием нейронной сети на старом на-
боре для обучения.
Почему? Да потому, что пословица «Что посеешь, то и пожнешь» ни к чему не под-
ходит так хорошо, как к ИИ. Модель ИИ — не волшебный помощник, она не может «про-
глотить» ужасную выборку и чудесным образом указать, как использовать эти данные.
Поэтому сделайте одолжение своей модели ИИ — проявите изобретательность и най-
дите самые лучшие отличительные черты, какие только возможно.
Кривая ошибок
Действительно положительные значения
100%
90%
80%
Логистическая регрессия
70%
Линейная регрессия
60%
50%
40%
30%
20%
10%
0%
0%
%
%
%
0%
10
20
30
40
50
60
70
80
90
Ложноположительные значения 10
Дополнительная информация
Если вам очень понравился контролируемый ИИ и вы нашли в этой главе от-
веты на свои вопросы, то я, с вашего позволения, предложу вашему вниманию
несколько книг:
•
Data Mining with R, Luis Torgo (Chapman & Hall/CRC, 2010) прекрасно под-
ходит для следующего шага. В этой книге дается описание машинного об-
учения на языке программирования R. R — любимый язык всех и каждого,
кто работает со статистикой, и его несложно освоить в достаточном для
моделирования ИИ объеме. R будет идеальной площадкой для обучения
и запуска вашей производственной модели.
•
The Elements of Statistical Learning, Trevor Hastie, Robert Tibshirani, Jerome
Friedman (Springer, 2009). Выражает академический взгляд на различные
модели ИИ. Местами тяжеловатая для восприятия, эта книга может дей-
ствительно поднять ваши интеллектуальные изыскания на новый уровень.
На сайте Hastie’s Stanford есть бесплатная онлайн-версия.
Подытожим
Поздравляю! Вы только что построили модель классификации в электронной
таблице. Даже две. Может, даже две с половиной. А если вы еще и приняли мой
вызов с медианной регрессией, то вы просто гигант!
Давайте вспомним, чем же мы занимались в этой главе:
•
выбор отличительных черт и сборка обучающих данных, включая созда-
ние фиктивных переменных из категорийных данных;
•
обучение модели линейной регрессии путем минимизации суммы ква-
драта отклонений;
•
вычисление R-квадрата, показывающего с помощью теста, что модель ста-
тистически значима;
•
определение качества работы модели на опорной выборке при различных
ограничениях с помощью вычисления точности, специфичности, доли лож-
ноположительных результатов и памяти;
•
отображение кривой ошибок;
•
добавление логистической функции связи к общей линейной модели и ре-
оптимизация;
•
максимизация вероятности в логистической регрессии;
•
сравнение моделей с помощью кривой ошибок.
Несмотря на то, что данные в этой главе — чистейшая выдумка, подобная ло-
гистическая модель — отнюдь не повод для шуток. Вы можете воспользоваться
аналогичными инструментами для поддержки производственных решений или
автоматизированной системы маркетинга вашего бизнеса.
Если вам хочется продолжать работу с ИИ, то в следующей главе я покажу
вам другой подход, который называется комбинированной моделью.
Комплексные модели:
7 огромная куча ужасной
пиццы
Эта глава пролетит быстро, потому что мы возьмем базу данных Ритейл-
Марта из главы 6. Используя те же самые данные, вы лучше поймете различия
в применении двух моделей, которые я собираюсь вам предложить, и регрес-
сионных моделей из предыдущей главы. Техники моделирования, которые мы
будем использовать в этой главе, придуманы не так давно. Они более интуи-
тивны и, вероятно, являются одними из самых мощных технологий ИИ, суще-
ствующих на данный момент.
Также мы построим кривые ошибок в точности, как в главе 6, так что я не буду
тратить много времени на объяснение расчетов параметров качества работы
модели. Загляните в главу 6, если вдруг захотите освежить в памяти понятия
«точность» и «чувствительность».
Итак, начнем. В таблице, которую вы, возможно, загрузили, есть лист TD,
содержащий обучающие данные из главы 6 с уже настроенными фиктивными
переменными (подробнее также в главе 6). Отличительные признаки пронуме-
рованы от 0 до 18 в строке 2. Нумерация пригодится нам чуть позже для запи-
сей результатов (рис. 7-1).
Также рабочая таблица содержит лист Test Set из главы 6.
сделали такой заказ до рождения ребенка. С другой стороны, только двое «не-
беременных» покупателей заказали фолиевую кислоту.
Так что между заказом препаратов фолиевой кислоты и беременностью,
бесспорно, существует связь. Можно использовать эту простую зависимость
для сборки такого слабообучаемого классификатора:
Информация
о покупателе
Покупали ли
вы фолиевую
кислоту
НЕТ ДА
Не беременны Беременны
Покупали ли Вы
фолиевую
НЕТ кислоту? ДА
Средняя загрязненность:
Не беременны Беременны
0,89 * 0,49 + 0,11 * 0,04 = 44%
Обучим же ее!
Из обучающих данных вам нужно взять случайный набор строк и столбцов.
Простейший способ это сделать — перемешать столбцы как колоду карт, а за-
тем выбрать необходимое из верхнего левого угла таблицы.
Для начала скопируйте А2:U1002 из вкладки TD в верхнюю часть новой таб-
лицы под названием TD_BAG (названия признаков вам не понадобятся — нужны
только их порядковые номера из строки 2). Самый простой способ перемешать
TD_BAG — это добавить еще один столбец и одну строку, заполненные случай-
ными числами (с помощью оператора RAND/СЛЧИС). Сортировка по случайным
значениям слева направо и сверху вниз, а затем выбор нужного количества
из верхнего левого угла таблицы дает вам случайный набор строк и признаков.
7. Комплексные модели: огромная куча ужасной пиццы 301
•
признак может иметь значение 0, а Preganant — 1;
•
признак может иметь значение 0, а Preganant — 0;
•
признак может иметь значение 1, а Preganant — 1;
•
признак может иметь значение 1, а Preganant — 0.
=IF(I2/(I2+I3)>I4/(I4+I5),0,1)
=ЕСЛИ(I2/(I2+I3)>I4/(I4+I5),0,1)
=1–(I2/(I2+I3))^2-(I3/(I2+I3))^2
=1-(I4/(I4+I5))^2-(I5/(I4+I5))^2
306 Много цифр
Записываем победителя
Итак, витамины в моем варианте победили. У вас результат наверняка оказался
другим, и теперь следует его где-то записать.
Назовите ячейки N1 и N2 Winner и Pregnant Is. Вы сохраняете выигравшие де-
ревья в столбце О. Начните с сохранения номера выигравшего столбца в ячейке
О1. Это будет значение из промежутка I1:L1 с минимальной загрязненностью
(в моем случае это 8). Вы также можете скомбинировать формулы MATCH/ПОИСК-
ПОЗ и INDEX/ИНДЕКС, чтобы они нашли его за вас (более подробно о них рас-
сказано в главе 1):
7. Комплексные модели: огромная куча ужасной пиццы 307
=INDEX(I1:L1,0,MATCH(MIN(I10:L10),I10:L10,0))
=ИНДЕКС(I1:L1,0,ПОИСКПОЗ(МИН(I10:L10),I10:L10,0))
MATCH(MIN(I10:L10),I10:L10,0))/ПОИСКПОЗ(МИН(I10:L10),I10:L10,0))
находит столбец с минимальной загрязненностью в строке 10 и передает ин-
формацию функции INDEX/ИНДЕКС. Эта функция определяет положение назва-
ния соответствующего признака.
Аналогично в О2 можно определить, 0 или 1 ассоциируется с беременно-
стью — найти значение в строке 6 в столбце с минимальной загрязненностью:
=INDEX(I6:L6,0,MATCH(MIN(I10:L10),I10:L10,0))
=ИНДЕКС(I6:L6,0,ПОИСКПОЗ(МИН(I10:L10),I10:L10,0))
Как видите, с этим вторым дело пошло гораздо быстрее, чем с первым. Так
что продолжайте…
7. Комплексные модели: огромная куча ужасной пиццы 309
Скажем, вы хотите ансамбль из 200 моделей. Все, что вам нужно сделать, —
это повторить эти шаги еще 198 раз. Ничего невозможного, просто надоедает.
Почему бы вам просто не записать это действие в макрос и затем проигры-
вать его? Оказывается, перемешивание очень подходит для макроса.
Для тех, кто никогда не записывал макрос: это не что иное, как запись серии
повторяющихся нажатий на клавиши, чтобы потом можно было ее проиграть
вместо того, чтобы самому зарабатывать туннельный синдром.
Так что ищем на панели меню Вид Макрос (в MacOs Инструменты Мак-
рос) и выбираем «Начать запись».
Нажатие кнопки «Запись» откроет окно, в котором вы сможете дать своему
макросу название, например GetBaggedStump. Удобства ради проассоциируем
вызов макроса с комбинацией клавиш. У меня MacOS, так что все мои комби-
нации начинаются с Option + Cmd, к которым я хочу добавить Z, потому что
сегодня у меня такое настроение (рис. 7-15).
Нажмите ОК, чтобы начать запись. Вот шаги, которые нужны для создания
одноуровневого дерева решений:
Качество работы
Вы можете оценить эти прогнозы, используя те же параметры оценки ра-
боты и расчеты, что и в главе 6. Сначала создайте новый лист под названием
PerformanceBag. В первом столбце найдите максимальный и минимальный про-
гнозы. Для моих 200 деревьев эти значения получились равными 0,02 и 0,75.
Поместите в столбец В серию граничных значений от минимума до максимума
(в своем случае я сделал шаг равным 0,02). Точность, специфичность, доля поло-
жительных результатов и чувствительность вычисляются так же, как и в главе 6.
Таким образом получается лист, изображенный на рис. 7-20.
Обратите внимание на граничное значение прогноза 0,5 — при половине
деревьев, проголосовавших за беременность, вы можете идентифицировать
33 беременных покупателя с одним лишь процентом ложноположительных
результатов (напоминаю, что в вашем варианте это может быть совсем другое
граничное значение — ведь мы используем случайные числа). Весьма неплохо
для нескольких простых деревьев!
7. Комплексные модели: огромная куча ужасной пиццы 313
Кривая ошибок
100%
Действительно положительные значения
90%
80%
70%
60%
50%
40%
30%
20%
10%
0%
0%
%
%
%
%
%
%
%
%
%
0%
10
20
30
40
50
60
70
80
90
10
Ложноположительные значения
Бустинг:
если сразу не получилось,
бустингуйте и пробуйте снова
Давайте вспомним, зачем мы занимались бэггингом.
Если вы обучаете пачку деревьев поиска решений на полном наборе дан-
ных несколько раз, снова и снова, то они будут идентичны. Выбирая образцы
из базы данных случайным образом, вы вносите немного разнообразия в ваши
деревья и, в конце концов, находите такие нюансы в обучающих данных, кото-
рые одно дерево ни за что бы не обнаружило.
Бэггинг делает со случайным выбором то же самое, что бустинг делает с ве-
сами. Бустинг не выбирает случайные порции из набора данных — он исполь-
зует весь набор данных в каждой итерации обучения. Он фокусируется на об-
учении дерева решений, которое исправляет некоторые грехи, совершенные
предыдущими деревьями. Алгоритм таков:
•
Сначала все строки обучающих данных считаются одинаковыми. Все они
имеют одинаковый вес. В вашем случае есть 100 строк, и все они начинают
с весом 0,001. То есть в сумме все веса составляют единицу.
•
Оцените каждый признак на фоне остальных, чтобы выбрать лучшее дерево
решений. Кроме того, если мы применяем бустинг, а не бэггинг, то победит
дерево с минимальным взвешенным отклонением (погрешностью). Каждое
ложное предположение для возможного дерева считается штрафом, рав-
ным весу строки. Сумма этих штрафов и есть взвешенная погрешность.
Выберите дерево с минимальной взвешенной погрешностью.
•
Веса регулируются. Если выбранное дерево решений правильно предска-
зывает строку, то ее вес уменьшается. Если выбранное дерево решений
ошибается со строкой, то вес строки растет.
•
Новые деревья обучаются с помощью этих новых весов. Таким образом,
по ходу выполнения, алгоритм больше концентрируется на строках с об-
учающими данными, которые предыдущие деревья обработали плохо. Де-
ревья обучаются, пока взвешенное отклонение не достигнет порога.
Выбираем победителя
Поместите в ячейку W1 название Winning Error, а в Х1 найдите минимальное
значение взвешенной погрешности:
=MIN(C7:U7)
=МИН(C7:U7)
INDEX(C1:U1,0,MATCH(X1,C7:U7,0))
ИНДЕКС(C1:U1,0,ПОИСКПОЗ(X1,C7:U7,0))
Так как общая взвешенная погрешность дерева растет, выражение под зна-
ком натурального логарифма уменьшается и приближается к 1. А так как на-
туральный логарифм 1 равен 0, значение параметра альфа все уменьшается
и уменьшается. Посмотрим на это в таблице.
Назовите ячейку W4 Alpha, а в Х4 поместите взвешенную погрешность из Х1,
подставленную в расчет параметра альфа:
=0,5*LN((1-X1)/X1)
Для этого первого дерева значение альфа в итоге получается равным 0,207
(рис. 7-27).
альфа, если считает, что покупатель беременный, и –альфа, если нет. Так что
это первое дерево во время голосования в тестовых данных будет давать 0,207
каждому покупателю, не купившему противозачаточные и –0,207 каждому ку-
пившему. Итоговый прогноз ансамбля моделей — это сумма всех этих положи-
тельных и отрицательных значений параметра альфа.
Как вы увидите позже, чтобы определить общий прогноз беременности,
выданный моделью, нужно установить границу на сумму баллов конкретного
дерева. Поскольку в качестве своего вклада в прогноз каждое дерево выдает
либо положительное, либо отрицательное значение альфа, в качестве класси-
фикационного порога принято использовать 0, однако вы можете менять его,
дабы достичь большей точности.
Повторное взвешивание
Теперь, когда вы закончили с одним деревом, пришло время заново взвесить
обучающие данные. Для этого нужно узнать, какие строки данных это дерево
обрабатывает правильно, а какие — нет.
Поэтому в столбце V озаглавьте ячейку V9 Wrong. В V10 можно использовать
формулу OFFSET/СМЕЩ вместе с номером столбца выигравшего дерева (ячейка
Х2), чтобы найти взвешенную погрешность обучающей строки. Если погреш-
ность не нулевая, то значит, дерево неправильно обработало строку и в стол-
бец Wrong записывается единица:
=IF(OFFSET($C10,0,$X$2)>0,1,0)
=ЕСЛИ(СМЕЩ($C10,0,$X$2)>0,1,0)
=$B10*EXP($V10*$X$4)
=SUM(W6:HN6)
=СУММА(W6:HN6)
Скопируйте эту сумму на весь столбец. У вас получится лист вроде изобра-
женного на рис. 7-33. Баллы в столбце V больше нуля означают, что больше
альфа-взвешенных прогнозов ушло в положительном направлении, чем в от-
рицательном (рис. 7-33).
Кривая ошибок
100%
Действительно положительные значения
90%
Бустинговая
80%
Бэггинговая
70%
60%
50%
40%
30%
20%
10%
0%
0%
%
0%
10
20
30
40
50
60
70
80
90
10
Ложноположительные значения
что риск переподгонки данных немного выше. Так как каждое переписывание
обучающих данных основано на неверно классифицированных в предыдущей
итерации точках, в итоге можно оказаться в ситуации, когда обученные вами
классификаторы становятся чрезвычайно чувствительными к выбросам.
К тому же итеративное повторное взвешивание данных означает, что бу-
стинг, в отличие от бэггинга, не может быть запараллелен на несколько ком-
пьютеров или ядер процессора.
Таким образом, в гонке между хорошо подогнанными бустинговой и бэггин-
говой моделями последней победа оказалась не по зубам.
Подытожим
Только что на ваших глазах пачка простых моделей была скомбинирована бэг-
гингом или бустингом в ансамбль моделей. Эти методы, не известные аж до се-
редины девяностых, сегодня являются двумя самыми популярными техниками
моделирования, используемыми в бизнесе.
Вы можете подвергнуть бустингу или бэггингу любую модель, которую хо-
тите использовать как слабообучаемую. Эти модели совсем не обязательно со-
стоят из одноуровневых или любых других деревьев принятия решений. К при-
меру, последнее время широко обсуждается бустинг моделей наивного Байеса,
вроде того, с которым мы работали в главе 3.
328 Много цифр
Знакомство с временной
последовательностью данных
ЗАМЕТКА
На графике есть несколько пиков и спадов, что может быть признаком неко-
торой сезонности. В частности, пики спроса приходятся на месяцы с номерами
8. Прогнозирование: дышите ровно, выиграть невозможно 333
12, 24 и 36, которые оказываются декабрями. Но может быть это лишь случай-
ность или особенность тренда? Давайте выясним.
Медленный старт
с простым экспоненциальным сглаживанием
Методы экспоненциального сглаживания основываются на прогнозировании
будущего по данным из прошлого, где более новые наблюдения весят больше,
чем старые. Такое взвешивание возможно благодаря константам сглаживания.
Первый метод экспоненциального сглаживания, который мы опробуем, называ-
ется простым экспоненциальным сглаживанием (ПЭС, simple exponential smoothing,
SES). Он использует лишь одну константу сглаживания.
При простом экспоненциальном сглаживании предполагается, что ваш вре-
менной ряд данных состоит из двух компонентов: уровня (или среднего) и не-
коей погрешности вокруг этого значения. Нет никакого тренда или сезонных
колебаний — есть просто уровень, вокруг которого «висит» спрос, тут и там
окруженный небольшими погрешностями. Отдавая предпочтение более но-
вым наблюдениям, ПЭС может явиться причиной сдвигов этого уровня. Говоря
языком формул,
И еще один:
Настраиваем прогноз
простого экспоненциального сглаживания
Первое, что нужно сделать, — это создать новый лист в документе под назва-
нием SES. Вставьте временной ряд данных в столбцы А и В, начиная со строки 4,
чтобы оставить немного места наверху для значений альфа. Вы можете вве-
сти количество месяцев, которое у вас есть (36) в ячейку А2, а исходное зна-
чение альфа — в С2. Я начну с 0,5, потому что это число между 0 и 1 и оно мне
нравится.
Поместите расчет уровня в столбец С. Нужно вставить новую строку 5 во вре-
менной ряд данных вверху таблицы для исходного приближения уровня в мо-
мент времени 0. В С5 используйте следующий расчет:
=AVERAGE(B6:B17)
=СРЗНАЧ(B6:B17)
Эти средние значения данных за первый год дают исходный уровень. Таб-
лица с ними выглядит так, как показано на рис. 8-3.
336 Много цифр
Обратите внимание, что у меня перед альфой стоит значок $, поэтому при
распространении формулы на всю таблицу абсолютные ссылки на строку
8. Прогнозирование: дышите ровно, выиграть невозможно 337
Рястяните
Вы будете смеяться, но сделано уже практически все. Просто растяните С6:Е6
вниз на все 36 месяцев и — вуаля! — у вас есть уровень.
Добавим месяцы 37–48 в столбец А. Прогноз на следующие 12 месяцев — это
просто уровень36. Так что в В42 можно добавить только
=C$41
Для альфы, равной 0,5, оно получается равным 20,94 (рис. 8-7). Вспомнив пра-
вило 68–95–99,7 из обсуждения нормального распределения в главе 4, вы пой-
мете, что 68% погрешностей одношагового прогноза должны оказаться меньше
20,94 и больше –20,94.
Теперь ваша задача — сжать это распределение насколько возможно, найдя
подходящее значение альфы. Попробуйте несколько разных значений, исполь-
зуя «Поиск решения» в который раз в этой книге.
Настройка «Поиска решения» для этой операции чрезвычайно проста.
Откройте опцию, установите целевую функцию — стандартное отклонение
в ячейке F2, и переменную решения — альфа в С2, добавьте ограничение,
что С2 должна быть меньше 1, и поставьте галочку в поле, указывающем,
что решение должно быть неотрицательным. Рекурсивные расчеты уровня,
входящие в каждый расчет погрешности прогноза, очень нелинейны, по-
этому для оптимизации альфы нам придется воспользоваться эволюцион-
ным алгоритмом.
340 Много цифр
А теперь графика!
Лучший способ проверить наш прогноз — это нарисовать его диаграмму рядом
с графиком данных о спросе в прошлом и посмотреть, как спрогнозированный
спрос отличается от реального. Мне нравится вид простой диаграммы Excel. Для
начала выберите А6:В41, где расположены наши исторические данные, и про-
стую линейную диаграмму из вариантов, предложенных Excel.
Добавив график, кликните на нем правой кнопкой мыши, выберите «Выбрать
данные» и вставьте туда новую серию свежепредсказанных значений А42:В53.
Если хотите, добавьте также названия осей, после чего у вас получится что-то
похожее на рис. 8-9.
=INDEX(LINEST(B2:B37,A2:A37,TRUE,TRUE),1,1)
=ИНДЕКС(ЛИНЕЙН(B2:B37,A2:A37,ИСТИНА,ИСТИНА),1,1)
8. Прогнозирование: дышите ровно, выиграть невозможно 343
Получается уклон, равный 2,54, что означает тренд линии регрессии к по-
вышению спроса на 2,54 дополнительных меча в месяц. То есть уклон действи-
тельно есть. Но значим ли он статистически?
Чтобы проверить уклон критерием Стьюдента, нужно узнать стандартное
отклонение уклона и количество степеней свободы регрессии. LINEST/ЛИНЕЙН
помещает значения стандартного отклонения в строку 2, столбец 1 массива ре-
зультатов. К примеру, в В40 вы можете это написать как:
=INDEX(LINEST(B2:B37,A2:A37,TRUE,TRUE),2,1)
=ИНДЕКС(ЛИНЕЙН(B2:B37,A2:A37,ИСТИНА,ИСТИНА),2,1)
Рис. 8-10. Уклон и стандартное отклонение линии регрессии, подогнанное под исторический спрос
У вас должно получиться 34 степени свободы (как отмечено в главе 6, они рас-
считываются как 36 точек данных минус 2 коэффициента линейной регрессии).
344 Много цифр
Теперь известны все три значения для проверки критерием Стьюдента ста-
тистической значимости вашего подогнанного тренда. Так же, как и в 6 главе,
вы можете вычислить статистику этого критерия как абсолютную величину
уклона, разделенную на стандартное отклонение уклона. Рассчитайте величину
р для этой статистики из распределения Стьюдента с 34 степенями свободы,
воспользовавшись функцией TDIST/СТЬЮДРАСП в В42:
=TDIST(ABS(B39/B40),B41,2)
=СТЬЮДРАСП(ABS(B39/B40),B41,2)
Функция выдает значение р, близкое к 0, намекая на то, что если бы тренд был
не существующим в реальности (уклон 0), то ни при каких условиях мы бы не по-
лучили настолько отличающийся от регрессии уклон. Это показано на рис. 8-11.
уровень текущий период= уровень предыдущий период + тренд предыдущий период + альфа ×
× (спрос текущий период – (уровень предыдущий период + трендпредыдущий период))
346 Много цифр
Для этой новой техники сглаживания нам понадобится новое уравнение об-
новления тренда. Для первого шага оно будет таким:
Теперь вы можете обновить значение уровня в ячейке С6 — оно будет равно
предыдущему значению, к которому прибавлен предыдущий тренд и альфа,
умноженная на погрешность:
=C5+D5+C$2*F6
Тренд в D6 обновляется точно так же, только нужно еще прибавить гамму,
умноженную на альфу, умноженную на погрешность:
=D5+D$2*C$2*F6
Прогнозируем будущее
Чтобы прогнозировать дальше, чем на 36 месяцев, добавьте итоговый уровень
(который для альфы и гаммы, равных 0,5, будет равняться 281) к количеству
месяцев после 36-го, на которые вы хотите рассчитать прогноз, умноженному
на итоговое приближение тренда. Вы можете подсчитать количество месяцев
от 36 до нужного вам, вычтя один месяц в столбце А из другого.
8. Прогнозирование: дышите ровно, выиграть невозможно 349