[Перевод] Машинное обучение: мост между бизнесом и Data Science

z0dj1i2jkfzl5qxhqcnmdf8ihmo.jpeg


Если последние несколько лет вы не жили на далёком острове без электричества и связи, то, вероятно, слышали о машинном обучении. Этот тренд было сложно не заметить. Каждый раз, когда мы говорим о беспилотных автомобилях, чат-ботах, AlphaGo или предиктивной аналитике, упоминается та или иная реализация машинного обучения. Хотя недостатка в историях и евангелистах нет, машинное обучение пока не стало в глазах бизнеса абсолютной необходимостью. В общественном восприятии применяемые в ML алгоритмы близки к научной фантастике, а подготовка конкретного плана внедрения ML по-прежнему остаётся высоким барьером.

Цель этой статьи — практические ответы, а не подготовка видения или продвижение тренда. Мы поговорим о зонтичном термине data science, о взаимосвязи его отраслей, основных задачах, которые может решать машинное обучение, а также о том, как эти задачи можно перевести на язык бизнеса. Также мы обсудим основные решения, которые нужно принять при найме специалистов, и выделим сложности, которые нужно учесть заранее

1. Объяснение терминологии data science


Концепция машинного обучения впервые была введена в 1950-х, ставших временем первооткрывателей в сфере ИИ. В 1950 году Алан Тьюринг опубликовал статью «Вычислительные машины и разум», в которой предложил знаменитый тест для оценки качества ИИ, который мы сегодня называем тестом Тьюринга. В 1959 году Артур Ли Самуэль сформулировал термин «машинное обучение». Многие теоретические открытия, которые мы используем и сегодня, были сделаны в то время. Но почему мы так много говорим о машинном обучении и data science именно сегодня?

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

В этом разделе мы обсудим отрасли data science и поговорим о их связи друг с другом.

1.1. Data science


Термин data science был придуман в 1960-х. У него есть множество определений; ориентированное на бизнес было сформулировано главным дата-саентистом MailChimp Джоном Форманом:

«Data science — это преобразование данных при помощи математики и статистики в ценные выводы, решения и продукты».

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

Сфера data science объединяет в себе множество взаимосвязанных областей, использующих различные методики и инструменты.

ro-haijxamai4top3uroj9-b7ns.jpeg


Дисциплины Data Science

1.2. Интеллектуальный анализ данных и поиск знаний в базах данных


Как видно из схемы, все области data science связаны с интеллектуальным анализом данных (data mining), так как он составляет базовый набор практик в data science. Термин data mining ошибочен и означает нечто иное. Мы не добываем сами данные, а создаём алгоритмы для извлечения ценных выводов из больших и часто неструктурированных данных. Первичная задача data mining — сопоставление доступных данных и их преобразование в удобные для обработки паттерны. Data mining считается частью более обширного процесса под названием Knowledge Discovery in Databases (KDD), который был предложен Грегори Пятецким-Шапиро в 1984 году.

bds2ayxotyjxli6pc7u8myplhge.jpeg


Fayyad, Piatetsky-Shapiro & Smyth, 1996

Хотя кажется, что data mining и KDD сами по себе решают основную задачу, на самом деле, полезность для бизнеса создаёт машинное обучение.

1.3. Машинное обучение


Между data mining и популярным сейчас машинным обучением есть разница. Машинное обучение тоже занимается созданием алгоритмов для извлечения ценных выводов с упором на непрерывное использование динамически меняющейся среды, активно задействуя настройку, повторное обучение и изменение алгоритмов на основании предыдущего опыта. Однако цель машинного обучения — постоянно адаптироваться к новым данным и выявлять в них новые паттерны или правила. Иногда оно может быть реализовано без руководства человека и программирования.

Благодаря множеству недавних теоретических и технологических прорывов машинное обучение стало самой динамически развивающейся областью. Эти прорывы привели к появлению обработки естественного языка, распознавания изображений и даже генерации машинами новых изображений, музыки и текста. Машинное обучение остаётся главным «инструментом» создания искусственного интеллекта.

1.4. Искусственный интеллект


Искусственный интеллект (ИИ, AI) — это, вероятно, наиболее расплывчатый термин в сфере data science. Кроме того, он сильно отделён от всех остальных. Основная идея создания ИИ заключается в применении распознавания паттернов и машинного обучения для изготовления агента, способного думать и рассуждать аналогично людям (или приблизиться к такой возможности). Однако из-за такого расплывчатого применения терминов пока не возникло единого понимания, как интерпретировать слово интеллект. Интеллект сложно сформулировать и его можно определить множеством разных способов. На языке бизнеса AI можно интерпретировать как способность решать новые задачи. По сути, решение новых задач — это результат восприятия, обобщения, рассуждений и суждений.

В глазах общественности AI обычно воспринимается как способность машин решать задачи во многих областях знания. Это делает их чем-то похожими на людей. Однако концепция сильного искусственного интеллекта (artificial general intelligence, AGI) остаётся пока областью научной фантастики и не соответствует уровню современного прогресса. Такие известные системы, как AlphaGo, IBM Watson или Libratus, недавно победивший людей в техасском холдеме, являются примерами слабого искусственного интеллекта (artificial narrow intelligence, ANI). Он специализируется в одной сфере и может выполнять задачи на основании схожих методик обработки данных. То есть data science всё ещё предстоит совершить переход от ANI к AGI, но такой прорыв вряд ли произойдёт в ближайшие десятилетия. Нарастающие страхи того, что машины займут большинство рабочих мест, частично обоснованы, однако сценарий захвата машинами мира — пока нет.

1.5. Big data


Big data — это тоже чрезмерно ажиотажный и ошибочно понимаемый термин. Рост цифровизации в бизнесе позволил собирать датасеты всё большего размера, содержащие разнообразные и обычно неструктурированные записи о клиентах, сотрудниках и корпоративных ресурсах. Они относятся к демографическому составу, взаимодействиям и поведениям, конечным устройствам и практически ко всему, что можно отслеживать цифровым образом или вводить вручную. Однако такие неструктурированные датасеты — пока ещё не big data.

«Сбор не означает понимания» — Шон Макклур, директор по Data Science в Space-Time Insight.

Сбор максимально доступных объёмов данных необязательно означает, что в них можно обнаруживать полезные паттерны. Концепция big data подразумевает выявление паттернов в крупных датасетах при помощи методик data mining и машинного обучения.

Почему сегодня делается такой большой упор на big data? Популярность big data среди технологических евангелистов проистекает из роста вычислительной мощи. Вместо использования ограниченных подмножеств данных в выявлении и экстраполировании результатов на всю предметную область мы можем обрабатывать все сырые данные, обеспечивать высокую точность и находить больше скрытых зависимостей. Это требует создания высококачественной инфраструктуры, способной обрабатывать всё увеличивающиеся массивы неструктурированных данных, разработку инструментов и получения опыта для правильной визуализации данных и извлечения из них выводов.

2. Пошаговый процесс машинного обучения


Так как же нам заставить алгоритмы находить полезные паттерны в данных? Основное различие между машинным обучением и традиционно программируемыми алгоритмами заключается в способности обрабатывать данные без программирования напрямую. Это означает, что инженеру не требуется предоставлять машине подробные инструкции о том, как обрабатывать каждый тип записей данных. Машина сама определяет эти правила, полагаясь на вводимые данные.

Вне зависимости от конкретной сферы применения машинного обучения, общий рабочий процесс остаётся одинаковым и итеративно повторяется в случае устаревания результатов или необходимости повышения точности. В этом разделе мы познакомим вас с основными концепциями процесса машинного обучения.

Главным результатом любого процесса машинного обучения становится математическая модель, описывающая обработку новых данных алгоритмом после обучения на подмножестве исторических данных. Цель обучения заключается в разработке модели, способной формулировать искомое значение (атрибут) — некое неизвестное значение для каждого объекта данных. Звучит сложно, но на самом деле это не так.

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

mgwuwa-xk9psbe-jqeuydosgb3w.jpeg


Процесс машинного обучения

В общем случае процесс состоит из следующих простых шагов:

  1. Сбор данных. Вы используете свою цифровую инфраструктуру и другие источники, чтобы собрать как можно больше полезной информации и объединить её в датасет.
  2. Подготовка данных. Процедуры предварительной обработки и очистки данных могут быть довольно сложными, но обычно они нацелены на заполнение отсутствующих значений и исправление других изъянов в данных, например, различающихся описаний одинаковых значений в столбце (допустим December 14, 2016 и 12.14.2016 будут восприниматься алгоритмом по-разному).
  3. Разбиение данных. Разделение подмножеств данных для обучения модели и дальнейшей оценки точности её работы с новыми данными.
  4. Обучение модели. Использование подмножества исторических данных для выявления в нём алгоритмом паттернов.
  5. Тест и валидация модели. Оценка точности модели при помощи подмножеств исторических данных для тестирования и валидации с целью определения точности прогноза.
  6. Развёртывание модели. Внедрение протестированной модели во фреймворк принятия решений в качестве части аналитического решения или с целью использования её возможностей пользователями (например, для улучшения таргетирования рекомендуемых товаров).
  7. Повторение. Сбор новых данных после использования модели для её инкрементного совершенствования.


3. Пять групп задач, решаемых машинным обучением


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

3.1. Классификация


Алгоритмы классификации определяют, к какой категории принадлежат объекты из датасета. Обычно категории называют классами. Решая задачи классификации, можно отвечать на разнообразные вопросы.

Задачи двоичной классификации:

  • Сконвертируется ли этот лид?
  • Это письмо — спам или нет?
  • Эта транзакция — мошенническая или нет?


z0dj1i2jkfzl5qxhqcnmdf8ihmo.jpeg


Двоичная классификация

Также существуют мультиклассовые задачи:

  • Эта квартира находится в Нью-Йорке, Сан-Франциско или Бостоне?
  • Кто на этой картинке: кошка, собака или птица?
  • Какой тип товара этот клиент купит с наибольшей вероятностью: ноутбук, десктоп или смартфон?


Ещё один высоко специфичный тип классификации — это обнаружение аномалий. Обычно его считают одноклассовой классификацией, потому что цель обнаружения аномалий — нахождение выбросов, необычных объектов в данных, не встречающихся в нормальном распределении. Какие виды задач это позволяет решать:

  • Есть ли в нашем датасете какие-то нетипичные клиенты?
  • Можем ли мы обнаруживать необычное поведение клиентов нашего банка?
  • Отклоняется ли этот пациент от других, судя по информации из медицинской карты?


2oqslbmvvpfbjvhhw7ttqgknrme.jpeg


Обнаружение аномалий

3.2. Кластерный анализ


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

  • Каковы основные сегменты наших покупателей по их демографическому составу и поведению?
  • Существует ли связь между риском невозврата кредита некоторыми клиентами банка и их поведением?
  • Можно ли классифицировать ключевые слова, благодаря которым люди попадают на наш сайт?


is7ajaor7u3vqmsgazrtrkharj8.jpeg


Кластерный анализ (приблизительное количество кластеров: 3)

3.3. Регрессия


Алгоритмы регрессии определяют не классы, а числовые искомые значения. Рассчитывая числовые переменные, эти алгоритмы позволяют прогнозировать спрос на товары, показатели продаж, отдачу от маркетинга и так далее. Примеры:

  • Сколько единиц этого товара мы сможем продать в следующем месяце?
  • Какой будет цена билета на этом рейсе?
  • Какой должна быть максимальная скорость автомобиля для продления срока его эксплуатации?


nb1fdifdgw5splkh7_1qijzcrae.jpeg


Линейная регрессия

3.4. Ранжирование


Алгоритмы ранжирования определяют относительную важность объектов (или элементов) в связи с другими объектами. Самый известный пример — это алгоритм PageRank, активно применяемый Google для ранжирования страниц в результатах выдачи поискового движка. Также алгоритмы ранжирования применяются Facebook* для определения того, какие посты в ленте для пользователей привлекательнее других. Какие ещё задачи может решать ранжирование?

  • Какие фильмы понравятся пользователю больше всего?
  • Каким должен быть список рекомендуемых отелей для этого пользователя?
  • Как ранжировать товары на странице поиска онлайн-магазина?


su3zwa10jznk3xl2aotkxusvxas.jpeg


Ранжирование рекомендаций фильмов

3.5. Генерация


Алгоритмы генерации применяются для генерации текстов, изображений или музыки. Сегодня они используются в приложениях наподобие Prisma, которое преобразует фотографии в изображения, похожие на картины, или WaveNet компании DeepMind, способное имитировать человеческую речь или создавать музыкальные композиции. Генеративные задачи в основном популярны в приложениях для массового потребителя, а не в решениях для предиктивного анализа, поэтому такой тип машинного обучения имеет большой потенциал в развлекательном ПО. Каковы потенциальные задачи генеративных алгоритмов?

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


flrgxynerksibwgc239s3dnxw80.jpeg


Фотография, превращённая в картину в стиле гравюры «Большая волна в Канагаве»

Для выполнения этих задач используются разные методики обучения моделей (или стили обучения). Обучение — это процедура разработки конкретной математической модели, подстроенной под зависимости в значениях исторических данных. Обученная модель способна распознавать эти зависимости в будущих данных и прогнозировать искомые значения. Существует три стиля обучения моделей.

4. Три стиля обучения моделей


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

4.1. Обучение с учителем


Алгоритмы обучения с учителем (supervised learning) работают с историческими данными, уже содержащими искомые значения. Сопоставление этих искомых значений в обучающих датасетах называется разметкой. Иными словами, люди сообщают алгоритму, какие значения следует искать и какие решения правильны или ошибочны. Рассматривая метку как пример успешного прогноза, алгоритм учится находить такие искомые значения в будущих данных. Сегодня машинное обучение с учителем активно используется в задачах и классификации, и регрессии, так как обычно в обучающих датасетах уже присутствуют искомые значения.

Это делает обучение с учителем самым популярным подходом в бизнесе. Например, если вы выбираете двоичную классификацию для прогнозирования вероятности конверсии лидов, то вы знаете, у каких лидов была конверсия, а у каких нет. Можно разметить искомые значения (есть конверсия/нет конверсии или 0/1) и обучать модель. Алгоритмы обучения с учителем также используются в распознавании объектов на изображениях, определении настроя постов в соцсетях и в прогнозировании таких числовых значений, как температура, цены и так далее.

4.2. Обучение без учителя


Обучение без учителя (unsupervised learning) нацелено на упорядочивание данных без размеченных искомых значений. В этом случае цель машинного обучения заключается в определении паттернов в значениях и в структурировании объектов согласно их схожести или различиям. В сфере задач классификации обучение без учителя обычно применяется в алгоритмах кластеризации, обнаружении аномалий и в генеративных задачах. Эти модели полезны в поиске скрытых взаимосвязей между элементами, в решении задач сегментации и так далее.

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

4.3. Обучение с подкреплением


Обучение с подкреплением (reinforcement learning) — это, вероятно, самый сложный стиль машинного обучения, источниками вдохновения для которого стали теория игр и бихевиоризм. Агент (алгоритм) должен принимать решения на основании входящих данных и «награждаться» или «наказываться» в зависимости от успешности этих решений. Итеративно получая «награды» и «наказания», агент изменяет свои решения и постепенно учится достигать лучших результатов.

Методики обучения с подкреплением активно используются в робототехнике и разработке ИИ. Известный алгоритм AlphaGo компании DeepMind использовал обучение с подкреплением для оценки наиболее продуктивных ходов в игре го, а не перебирал все возможные конфигурации камней на доске. Предположительно, обучение с подкреплением наряду с методиками обучения с учителем также применяется в автопилоте Tesla. Этот стиль обучения используется, когда автопилот включен и водитель корректирует его решения.

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

5. Как подступиться к машинному обучению


Для большинства бизнесов предиктивная аналитика и машинное обучение по-прежнему остаются «терра инкогнита». Хотя эволюция инструментов машинного обучения впечатляет, пока по-прежнему сложно сделать так, чтобы они приносили пользу бизнесу. Компании сталкиваются с проблемами найма специалистов, внутренними сложностями поиска руководителей и отсутствием гибкости в чрезмерно зарегулированной корпоративной культуре. Довольно легко рассуждать об огромном потенциале big data, горячее обсуждение которого ведётся во многих медиа, но реальность может оказаться иной. С другой стороны, инвестициями в big data обычно занимаются крупные игроки. Это значит, что конкурентоспособность мелких и негибких бизнесов снижается.

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

5.1. «Переводчик для бизнеса» и визионер


Самое большое препятствие перед внедрением корпоративной культуры, в основе которой лежат данные — это отсутствие должной аналитики и руководства в data science. Согласно опросу McKinsey Global Institute, 45 процентов компаний с трудом вырабатывают нужное видение и стратегию обработки данных и машинного обучения. Сложности найма специалистов хорошо известны: на рынке есть дефицит экспертов в data science, а их найм и удержание затратны. По данным опроса, найти дата-саентиста сложно, но ещё сложнее найти руководителя аналитических проектов. А ведь именно эта должность критически важна для управления эффективными процессами обработки данных. Хотя без руководителя аналитики вы можете внедрить реализации машинного обучения и компенсировать отсутствующие звенья, процесс работы при этом будет оставаться реактивным, а не проактивным.

Набор навыков этого «переводчика для бизнеса», или chief analytics officer (CAO) мультидисцилинарен, он является мостом между ценностями бизнеса и функциями data science. Человек на этой должности должен взять на себя ответственность за объединение усилий отделов информационных технологий, data science и маркетинга, а также стейкхолдеров для разработки и развития стратегии работы с данными.

xhwqlxs49wtqrib31wpkjgspwjw.jpeg


Сфера деятельности Chief Analytics Officer

Ещё одна важная миссия руководителя аналитических проектов — исполнение роли визионера. Это подразумевает предвидение потенциала применения новых исследовательских работ в data science для бизнеса ещё до их широкого распространения. Большинство методик машинного обучения, начавших в последнее время приносить пользу бизнесу, известно в сфере data science уже десятки лет. А многие, например, обучение с подкреплением, так и не нашли областей применения вне лабораторий наподобие DeepMind. Выявляя эти тенденции на ранних этапах и находя способы применить их в бизнесе, «переводчик» способен обеспечить организации отрыв от конкурентов.

Однако найм специалистов-аналитиков — непростая задача. Сейчас разница между спросом на должности сениор-аналитиков и предложением составляет 5:1. А если специалиста нанять не удастся, его придётся искать и обучать внутри компании. В таком случае лучше всего задействовать человека, имеющего и технический опыт, и знания предметной области бизнеса. Иногда эту должность может получить chief technology officer, дата-саентист, желающий перейти на руководящую должность, или даже chief executive officer, в зависимости от размера организации.

5.2. Организация, в основе которой лежат данные


Дата-саентист может быть эффективен только в продуктивной корпоративной среде. Внедрение инициативы по машинному обучению должно поддерживаться и пониматься на всех уровнях организации. При появлении каждой новой технологии требуется не только обучение, но и большие усилия по продвижению изменений и её преимуществ. Если вы планируете использовать машинное обучение в поддержку процессу принятия решений или в качестве рычага для принятия важных решений, то такой образ мышления, скорее всего, столкнётся с достаточно сильным сопротивлением. Люди привыкли принимать решения на основании своей интуиции и опыта, которые и делают их профессионалами. Задача руководителя аналитических проектов (или CAO), а также других Chief-руководителей заключается в обучении сотрудников и стимулировании инноваций. Именно поэтому предпочтительно, чтобы дата-саентист обладал навыками коммуникации и презентации.

Разрозненное хранение данных. Разрозненная структура отделов — ещё один барьер перед созданием организации, в основе которой лежат данные. Доступ к данным может быть слишком зарегулирован, или сами отделы могу стремиться к тому, чтобы хранить внутри собираемые ими данные. Борясь с таким поведением, вы можете достичь гораздо лучших результатов в повышении полезности результатов.

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

Заключение


Эта статья не содержит исчерпывающей информации, она не задумывалась как руководство по организации проектов машинного обучения. Хотя вам ещё многое стоит изучить, мы рекомендуем использовать эту статью как инструкцию по оценке своей стратегии.

Основная задача бизнеса сегодня — понять, когда и как будет реализована стратегия, чтобы не отставать от изменений, которые привносят машинное обучение и предиктивная аналитика. Современная эпоха бизнес-решений приносит успех тем, кто способен правильно использовать собираемые данные.

Понравилась статья? Еще больше контента на темы разметки, Data Mining и ML вы можете найти в нашем Telegram канале «Где данные, Лебовски?»


  • Как подготовиться к сбору данных, чтобы не провалиться в процессе?
  • Как работать с синтетическими данными в 2024 году?
  • В чем специфика работы с ML проектами? И как разметить 1500 пузырьков руды на одном фото и не сойти с ума?


Обо всем этом читайте в «Где данные, Лебовски?»

Habrahabr.ru прочитано 7279 раз