User:Akolobych/sandbox

Вступ
У сучасному світі часто доводиться стикатися з проблемою рекомендації товарів або послуг користувачам будь-якої інформаційної системи. У старі часи для формування рекомендацій обходилися зведенням найбільш популярних продуктів: що можна спостерігати і зараз, відкривши Google Play. Але з часом такі рекомендації стали витіснятися таргетованими (цільовими) додатками: користувачам рекомендуються не просто популярні продукти, а ті продукти, які імовірно сподобаються саме їм. Не так давно компанія Netflix проводила конкурс з призовим фондом в 1 мільйон доларів, завданням якого стояло поліпшення алгоритму рекомендації фільмів (детальніше). Такі задачі виконуюють за допомогою коллаборативної фільтрації згідно схожості користувачів з використанням косинусної міри. Коллаборативна фільтрація це метод, який використовується для побудови деяких рекомендаційних систем.

Кожна людина, кому коли небудь доводилось попередньо планувати авіа подорожі, зіштовхувались з проблемою оптимізації витрат на квитки. Одинакові маршрути можуть мати відмінну вартість у різні дні, на що впливає надзвичайно багато факторів, про які знають лише експерти авіакомпаній. Тому важко визначитись, коли варто придбати квиток.

Американський вчений у сфері комп’ютерних технологій, керівник програми штучного інтелекту в Вашингтонському університеті - Орен Еціоні, не захотів миритися з фактором "випадкової" ціни авіа перельотів і почав працювати над задачею визначення випадкових цін у мережі Інтернет.

Еціоні прийшов до висновку, що не варто враховувати усі нюанси і причини, що призводять до різниці цін, а потрібно прогнозувати вірогідність того, що ціна яка відображається зросте, чи опуститься. Реалізувати даного завдання виявилася надзвичайно простою. Достатньо проаналізувати уі продажі квитків по заданому маршруту, а також відношення цін і кількості днів до вильоту. Якщо середня вартість квитка мала тенденцію зниження, варто зачекати і придбати квиток пізніше. Якщо аналіз показував, що ціна квитка зросте, то система рекомендувала придбати квиток негайно.

Еціоні і його команда розробили сайт Farecast.com і випустили його у 2006 році для публічного бета-тестування. Сайт отримав надзвичайно неочікувану популярність серед користувачів і його автор був удостоєний місця у списку "Top-50" людей року журналу "Time".

Кожна людина, кому коли небудь доводилось попередньо планувати авіа подорожі, зіштовхувались з проблемою оптимізації витрат на квитки. Одинакові маршрути можуть мати відмінну вартість у різні дні, на що впливає надзвичайно багато факторів, про які знають лише експерти авіакомпаній. Тому важко визначитись, коли варто придбати квиток.

Американський вчений у сфері комп’ютерних технологій, керівник програми штучного інтелекту в Вашингтонському університеті - Орен Еціоні, не захотів миритися з фактором "випадкової" ціни авіа перельотів і почав працювати над задачею визначення випадкових цін у мережі Інтернет. Еціоні прийшов до висновку, що не варто враховувати усі нюанси і причини, що призводять до різниці цін, а потрібно прогнозувати вірогідність того, що ціна яка відображається зросте, чи опуститься. Реалізувати даного завдання виявилася надзвичайно простою. Достатньо проаналізувати уі продажі квитків по заданому маршруту, а також відношення цін і кількості днів до вильоту. Якщо середня вартість квитка мала тенденцію зниження, варто зачекати і придбати квиток пізніше. Якщо аналіз показував, що ціна квитка зросте, то система рекомендувала придбати квиток негайно. Еціоні і його команда розробили сайт Farecast.com і випустили його у 2006 році для публічного бета-тестування.

Дані більше не сприймалися як статична чи застаріла величина, яка стає непотрібною після досягання певної мети, наприклад після посадки літака. Швидше вони стали сировиною для бізнесу, яку можна використати для нової економічної вигоди.

По суті, великі дані призначені для прогнозування. Зазвичай їх можна описати як частину комп’ютерної науки "Штучний інтелект" (точніше розділ "машинне навчання"). Розглядається для застосування математичних прийомів до великої кількості даних для прогнозу імовірностей, наприклад таких, що електронний лист є спам-листом, чи визначенні того, що користувач ввівши "копяі" мав на увазі "копія".[3]

Застосування машинного навчання можуть бути найрізноманітнішими. Наприклад, сайт ancestry.com намагається побудувати сімейну історію всього людства, базуючись на всіх доступних на сьогоднішній день типах даних: від рукописних записів у всіляких книгах обліку до ДНК-аналізу. На сьогоднішній день їм вдалося зібрати вже близько п'яти мільярдів профілів людей, що жили в самі різні історичні епохи, і 45000000 генеалогічних дерев, що описують зв'язки всередині сімей. Головна складність в цій роботі полягає в тому, що оброблювані дані страждають неповнотою, в них багато неточностей, а ідентифікувати людей потрібно по аж ніяк не унікальним іменах, прізвищах, датах народження, смерті і т.п. Стандартні алгоритми не справляються з обробкою таких даних. Однак машинне навчання дозволяє враховувати всі ці неточності і з великою ймовірністю видавати правильні результати.[4]

Слід зазначити, що у якості джерел даних для даного продукту, використовувалася реляційна база даних сайту. Тобто обсяг даних, які можна було використати для алгоритм коллаборативної фільтрації був дуже обмеженим. Отже, для того, щоб рекомендаційні системи будувалися з більшою точністю, слід шукати інше джерело даних.

Проаналізувавши вимоги до поточного завдання, я визначив, що у даному випадку слід використати технологію Великих Даних (англ. Big Data), через її основні властивості: великий обсяг даних, різноманітність даних і швидкість опрацювання даних. Але у разі використання даної технології слід модернізувати поточні алгоритми коллабораційної фільтрації. Це пов’язане з тим, що роботу з даними збереженими на основі Великих даних слід виконувати категорично іншими методами. Для роботи з Великими даними прийнято використовувати бібліотеки, які забезпечуюють розподілену обробку даних. Отже розробивши систему, для одного з цих фреймворків, можна не тільки підвищи точність аналізу і пронозу, а й швидкість їх генерування.

Великі Дані
Великі дані (англ. Big Data) в інформаційних технологіях — це серія підходів, інструментів і методів обробки структурованих і неструктурованих різноманітних даних великих розмірів для отримання результатів, які легко сприймаються людиною, є ефективними в умовах неперервного приросту, розподілення по численних вузлах обчислювальної мережі. Big Data — це набори даних такого об'єму, що традиційні інструменти не здатні здійснювати їх охоплення, управління та обробку за помірний час. Важливо також відзначити те, що під терміном Big Data у різних контекстах можуть мати на увазі дані великого об'єму, технології їх обробки, проекти, компанії, які активно використовують дану технологію. До основних переваг використання технології Big Data можна віднести: Головні ознаки Великих Даних: Важливою деталлю у побудові рекомендаційних систем на основі Великих Даних є те, що усі дані є важливими, з будь якої інформації можна дістати корисне навантаження для алгоритмів. Наведу кілька прикладів того, що може бути джерелом даних, для яких необхідні методи роботи з великими даними:
 * Отримання якісно нових знань за рахунок комплексного аналізу усієї інформації у єдиному аналітичному сховищі.
 * Розширення функціональності існуючих інформаційних систем підтримки бізнесу.
 * Збільшення ефективності використання апаратних ресурсів серверів.
 * Забезпечення мінімальної вартості використання всіх видів інформації за рахунок можливості використання ПЗ з відкритим кодом і хмарних технологій зберігання інформації.
 * Об’єм (англ. Volume): дійсно великі (хоча розмір залежить від доступних ресурсів для їх обробки).
 * Різноманітність (англ. Variety): слабо структуровані і різнорідні.
 * Швидкість (англ. Velocity): обробляти потрібно дуже швидко.

Кількість джерел даних стрімко зростає, а значить технології їх обробки стають все більш затребуваними. Виходячи з визначення Big Data, можна сформулювати основні принципи роботи з такими даними: Перші два принципи не варто розглядати в рамках даної роботи. Я б хотів виокремити останній принцип. Локальність даних - у великих розподілених системах дані розподілені між великою кількостю машин. Якщо дані фізично знаходяться на одному сервері, а обробляються на іншому - витрати на передачу даних можуть перевищити витрати на саме опрацювання. Тому одним з найважливіших принципів проектування BigData - рішень є принцип локальності даних - по можливості обробляємо дані на тій же машині, на якій їх зберігаємо.[5]
 * Список поведінки користувачів в інтернеті
 * GPS-сигнали від автомобілів для транспортної компанії
 * Дані, що знімаються з датчиків у великому адронному колайдері
 * Оцифровані книги в Російській державній бібліотеці
 * Інформація про транзакції всіх клієнтів банку
 * Інформація про всі покупки в крупній рітейл мережі і т.д.
 * 1) Горизонтальна масштабованість.
 * 2) Відмовостійкість.
 * 3) Локальність даних.

Map Reduce. Фреймворк Hadoop.
MapReduce - це модель розподіленої обробки даних, запропонована компанією Google для обробки великих обсягів даних на комп'ютерних кластерах. MapReduce непогано ілюструється наступним зображенням: MapReduce припускає, що дані організовані у вигляді деяких записів. Обробка даних відбувається в 3 кроки: Функція map застосовується до одного вхідного запису і видає безліч пар ключ-значення. Безліч – тобто, може згенеруватися тільки один запис, може не згенеруватися жоден, а може згенеруватися кілька пар ключ-значення. Що буде знаходиться в ключі і в значенні - вирішувати користувачеві, але ключ - дуже важлива річ, так як дані з одним ключем в майбутньому потраплять в один примірник функції reduce. Функція reduce задається користувачем і обчислює фінальний результат для окремого «кошика». Безліч всіх значень, повернених функцією reduce, є фінальним результатом MapReduce-завдання. Кілька додаткових фактів про MapReduce:
 * 1) Крок Map. На цьому кроці дані попередньо обробляються за допомогою функції map, яку визначає користувач. Робота цього кроку полягає в передобробці і фільтрації даних. Робота дуже схожа на операцію map у функціональних мовах програмування - користувацька функція застосовується до кожного вхідного запису.
 * 1) Крок Shuffle. Проходить непомітно для користувача. На цьому етапі висновок функції map «розбирається по кошиках» - кожна корзина відповідає одному ключу виведення етапу map. Надалі ці кошики послужать входом для reduce.
 * 2) Крок Reduce. Кожен «кошик» зі значеннями, сформованими на етапі shuffle, потрапляє на вхід функції reduce.
 * 1) Всі запуски функції map працюють незалежно і можуть працювати паралельно, в тому числі на різних машинах кластера.
 * 2) Всі запуски функції reduce працюють незалежно і можуть працювати паралельно, в тому числі на різних машинах кластера.
 * 3) Shuffle представляє паралельне сортування, тому також може працювати на різних машинах кластера. Пункти 1-3 дозволяють виконати принцип горизонтальної масштабованості.
 * 4) Функція map, як правило, застосовується на тій же машині, на якій зберігаються дані - це дозволяє знизити передачу даних по мережі (принцип локальності даних).
 * 5) MapReduce - це завжди повне сканування даних, ніяких індексів немає. Це означає, що MapReduce погано застосовувати, коли відповідь від сервера потрібна дуже швидко.