Про паттерны в данных

Основная задача Data Mining — найти паттерны в данных и сделать на их основе предсказание. В первой лекции курса «Learning From Data» Yaser Abu-Mostafa предлагает слушателям интересную задачку (слайд 19), иллюстрирующую практическую проблему.

Нужно предсказать значение (+1 или -1) бинарной переменной f для квадратика под горизонтальной чертой на основании тренировочных данных над чертой.

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

Чтение SAS data sets из R

Допустим Вы подготовили данные для анализа в SAS и хотите воспользоваться богатыми возможностями предоставляемыми многочисленными R-библиотеками. Причин на это может быть несколько.
  • Например у вас нет лицензии на нужный продукт (IML, Miner, и т.д.)
  • В SAS ещё нет соответствующего метода/алгоритма/функционала (удобный синтаксис для операций над матрицами, какие-то новые методы изобретенные недавно, графические возможности (ggplot2), парсинг различных форматов данных, подготовка отчетов и презентаций (knitr) и т.д,)
  • Вы хотите иметь доступ к source code для того что бы разобраться детально как работает алгоритм и, возможно, изменить его под свои нужды
Последний пункт, на мой взгляд, особенно важен. Ну и конечно ни один продукт/язык программирования не решает все задачи одинаково хорошо, поэтому иногда имеет смысл использовать сильные стороны имеющихся в распоряжении интсрументов. А R — интсрумент мало того что хороший, но еще и бесплатный.
Со своей стороны SAS предоставляет интерфейс для вызова R функций через IML:
Calling Functions in the R Language. Но его у Вас может не быть, поэтому можно экспортировать данные в CSV формат и потом считать их в R. Более быстрый и удобный способ — воспользоваться библиотекой haven. Недавно вышла новая версия этого пакета, о чем автор написал на сайте r-bloggers.
Пример чтения:
# Установка package:
install.packages("haven")
# Загрузка библиотеки в R
library(haven)
Описание функций пакета можно найти на сайте CRAN в pdf файле.
Пример входных данных можно скачать из GitHub репозитория: hadley.sas7bdat. Сохранив файл локально, считываем его командой:
data = read_sas("D:/_tmp/hadley.sas7bdat")
На выходе получаем data.frame структуру данных с именованными переменными:

Альтернатива SAS — другой SAS :)

Несколько месяцев назад я видел новость, что компания SAS Institute подала иск на какую-то другую компанию и суд решил что язык программирования SAS не является собственностью компании SAS Inst.

Оказывается ответчиком была компания World Programming. Узнал я это на портале Quora, где кто-то задал вопрос про то сколько же в среднем стоит SAS. В ответах была ссылка на то что WPS предлагает свою реализацию языка SAS, но гораздо дешевле. Тем не менее на сайте я не нашел подтверждения, как так для того чтобы узнать цену нужно отправить запрос.

Интересные особенности о WPS найденные на их сайте:

И еще новость, но касательно R. Revolution Analytics (компания поставляющая коммерические решения на основе R), сделали доступной для свободного пользования расширенную библиотекой Intel MKL версию языка — Revolution R open. Сравнительные графики скорости на различных бенчмарках можно посмотреть на r-bloggers.

SAS Webcast в сентябре 2014 года

23 сентября прошёл очередной вебинар SAS, где обсуждались ближайшие изменения и нововведения в продукции компании SAS.  
Если вы являетесь партнёром компании SAS, то часовой вебинар можно просмотреть в оригинале по ссылке. Сентябрьский стрим был запущен в рамках «новой» для SAS партнёрской программы Partner Portal, о которой будет немного ниже.

 

Следующее аналогичное мероприятие пройдёт в январе 2015 года. Следите за новостями.
Я опишу основные позиции, которые были озвучены.
В вебинаре участвовало 3 человека:
Russ Cobb,Vice President of Alliances and Product Marketing
 Armistead Sapp, Executive Vice President and Chief Technology Officer
  Randy Guard, Vice President of Product Management
 Обсуждалось несколько тем:
1.       Изменения и улучшения политики парнёрства с SAS

Из всего списка я хочу выделить 2 момента:
a.       Появление курсов бесплатного обучения
b.      Появление SAS Partner Portal, пока в рамках Beta Trial.
Данный портал позволит не только получить от SAS индивидуальный подход по получению необходимой информации, но так же какого рода информация будет представлена: техническая поддержка, программы технического обучения или обучения по продажам и тд.
Более того, появиться рейтинг партнёрского сообщества по предоставляемым сервисам и появиться возможность самому выставлять оценку, появиться возможность указывать на моменты, которые стоит изменить. В общем, всё то, что обычно уже есть в аналогичных сообществах.
2.       Улучшения с последнего партнерского саммита в Мае этого года
На этом слайде компания SAS показывает в каких направлениях улучшилась и продолжает улучаться поддержка партнёров.
3.       Изменения в архитектуре ПО, включая SAS 9.4 Maintenance Release2
Далее, по пунктам из слайда.
В области SAS on HADOOP:
На мой взгляд, в работе с SAS on HADOOP самое важное то, что теперь можно использовать навыки SAS программирования для работы c HADOOP. Об этом ранее уже писал Николай.
В области High Performance Analytics произошло несколько улучшений в следующих областях:
·         масштабируемость данных (улучшенный DrillDown),
·         скорость принятия решений,
·         уменьшение стоимости лицензирования (за счёт opensource),
·         жизненный цикл (lifecycle), слайд ниже относится к этому вопросу
Улучшение в области визуализации данных:
·         Как для IT, так и для бизнес пользователей
·         Аналитики (Visual Analytics, Visual Statistics и тд)
·         Отчётность для мобильных решений и MS Office
·         SAS Studio(веб клиент для программистов SAS, о котором ранее упоминал Николай)
Улучшения в управлении данными:
Под Batch and Real Time понимается появления Event Streaming processing. На мой взгляд, данное программное обеспечение сегодня в тренде и востребовано. Тем не менее, аналоги есть у всех ведущих вендоров (например, CEP у IBM).
Для Data Quality и Integration были разработаны новые алгоритмы обработки данных. 
Чуть ниже будет слайд дорожной карты, который немного даст понимания в области управления данными.
Блок Customer Intelligence у SAS, на мой взгляд, и так занимает лидирующую позицию среди вендоров, но компания не останавливается и продолжает развиваться. Ниже на слайде 3 квадранта Гартнера, которые описывают понимание, как клиенты могут пользоваться управлениями маркетинговыми кампаниями и возможными маркетинговыми операциями.
На следующем слайде основные направления развития CI:
В области Fraud and Security наблюдается самый большой рост среди остальных продуктов компании SAS. Слайд ниже описывает структуру решения:
Forrester высоко оценил это направление в прошлом году:
4.       Обзор основных элементов дорожной карты
Ожидаемый нами слайд дорожной карты на ближайшие кварталы:
В самом вебинаре вы найдёте много подробностей, не изложенных в этой статье. На мой взгляд, его стоит посмотреть лично, хотя бы для практики английского языка =)
На этом всё!

Конкурс по анализу данных (с использованием SAS University Edition)

Всем привет!

Спасибо Роману Волынец за предоставленную ссылку в группе Профессионалы SAS.

Описание задачи взято с ссылки ниже:

Предлагается решить задачу коллекторского скоринга.
Коллекторский скоринг – это вид скоринга, применяемый для взаимодействия с клиентами, отказывающимися от исполнения условий кредитного договора, т.е. отказываются погашать задолженность. Скоринг в этом случае необходим для определения приоритетности действий служащих коллекторского бюро при работе по возвращению “плохого” кредита.


Банк – организация, выдающая кредиты.

Коллекторское бюро (агентство) – организация, предоставляющая услуги по возврату просроченной задолженности.

Просроченная задолженность (просрочка) – не оплаченная в срок задолженность по основному долгу кредитного договора.

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

Данные
Тренировочная выборка содержит информацию о банковских займах, проданных коллекторскому агентству.  Для каждого ID займа приведены его характеристики, характеристики просрочки по займу, а также информация о заемщике. Последний столбец содержит целевую переменную (1 – заемщик производит выплаты по долгу, 0 – заемщик не производит выплаты по долгу)
По заданному тренировочному набору данных (обучающей выборке) необходимо разработать алгоритм, который для каждого ID займа из тестовой выборки позволит спрогнозировать вероятность того, что заемщик будет производить выплаты по долгу.

Обязательные требования к алгоритму:
Aлгоритм должен работать таким образом, чтобы получая на вход тренировочный и тестовый наборы данных в формате SAS, строилась модель прогнозирования вероятности возврата «плохого» долга, построенная модель должна применяться к тестовой выборке и результат записываться в файл Results в формате SAS, содержащем 2 колонки: ID и Prob,

  • где ID идентификатор заемщика,
  • Prob – вероятность возврата долга.

Допустимой средой разработки является исключительно продукт SAS University Edition, который можно установить бесплатно, скачав по ссылке.
Обязательные требования к выполнению работы:

  • ​​Единственным доступным языком программирования является SAS Base (дополнительно участник может предоставить вариант на SAS IML)
  • Единственной доступной для реализации модели библиотекой является SAS STAT (библиотека методов статистического анализа SAS)
  • Использование других библиотек и инструментов, в том числе, подключаемых в SAS (таких как R) или поставляемых с другими продуктами SAS — недопустимо
  • Использование внешних источников данных (например, находящейся в свободном доступе информации об экономическом состоянии регионов) допустимо, но должно явно указываться в описании алгоритма и не нарушать авторских и других прав обладателей информации.

http://algomost.com/ru/tasks/sas-collection-scoring

Удачи тем, кто решит поучаствовать в этом конкурсе!

Простой пример визуализации данных в R

Что-то давно никто не писал тут, походу все в отпусках. Раз так, то позволю себе написать пост про применение R для построения графиков. Данные будут взяты из предыдущего поста. Для этого можно пройти на страницу Wiki, скопировать и сохранить табличку в csv file: link.

Считываются данные одной строкой:


data <- read.table(«./AnscombeQuartet.csv», header = TRUE, sep =»,»)

После этого все столбцы доступны по соответствующему header name:

data$x1

Далее можно проверить статистики, соответствуют ли они заявленным значениям.
Сделать это можно двумя способами:

  1. Применить к каждому столбцу функцию: mean(data$x1), var(data$x1), ….
  2. Либо воспользоваться функцией sapply(). Это некий аналог функции map в функциональных языках программирования.
Мы воспользуемся вторым способом 
(sapply(data, mean); sapply(data, var)):

Все статистики совпадают с заявленными. Теперь построим графики:
Если нужно построить всего один график, то делается это очень просто;

plot(data$x1, data$y1, xlab = «x», ylab = «y») #xlab, ylab add label names

Но нам нужно пробежаться по всем столбцами и уместить все 4 графика в одну фигуру. Это можно сделать в цикле:

par(mfrow=c(2,2), mar=c(2.0, 1.5, 1.5, 1.5), oma = c(2,2,2,2), pch = 16)
for(i in 1:4){
  x = eval(parse(text = paste( «data$x», i, sep=»» )))
  y = eval(parse(text = paste( «data$y», i, sep=»» )))
  plot( x, y )
  abline( lm(y ~ x) )
  grid( 10,10 )
}

Получаем график (на всякий случай в высоком разрешении: URL):

Пояснения:

  • abline( lm(y ~ x) ) строит линейную модель. Сама функция lm() возвращает объект определенного класса, и для того чтобы построить выходные данные не нужно их специальным образом извлекать, потому как функция abline( ) сама распознает контекст. 
  • Функция grid() добавляет вертикальные и горизонтальные линии координатной сетки
  • Функцией par( ) задаются расстояния от границ каждого графика до границ всей фигуры, также расстояния между своими фигурами, pch — вид маркера. Но можно было бы использовать dafault значения.
  • mfrow() задает геометрию расположения графиков
Вообще в R очень и очень богатые графические возможности (помимо статистики и более 5000 packages). Даже поддерживаются несколько парадигм, например есть ggplot2

Из SAS R code можно запустить очень просто, подробное описание есть ТУТ.


Весь R код использованный при написании поста можно найти ТУТ.

О важности визуализации данных

Читая эту статью наткнулся на интересное замечание. В 1973 году английский математик Francis Anscombe привел пример того как немедленный статистический анализ данных(без предварительной визуализации) может привести к неправильным выводам о свойствах этих данных. На следующей картинке проиллюстрированы четыре набора данных с очень близкими значениями статистик:

Anscombe's quartet



а именно:

Среднее значение переменной x = 9.0

Дисперсия переменной x = 11,0

Среднее значение переменной y = 7,50 (с точностью до двух значащих цифр после запятой)

Дисперсия переменной y = 4,122 или 4,127 (с точностью до трех значащих цифр после запятой)

Корреляция между переменными x и y = 0,816 (с точностью до трех значащих цифр после запятой)

Уравнение регрессии: y = 3,00 + 0.500 * x (с точностью до двух и трех значащих цифр после запятой соответственно)

Сами данные можно найти по ссылке : Wiki

PS: Как часто бывает, данные/определения в английской и русской версиях отличаются)

sas подгруппа на reddit

Всем добрый день.
По аналогии с английской reddit sas-подгруппой я зарегистрировал ветку reddit.com/r/sas_ru, предназначенную для обсуждений на русском языке.

Несколько первых возможно кому-то полезных линков:

Так же создан FAQ, предложения по наполнению которого приветствуются (пишите либо тут в комментариях, либо там (для регистрации не нужен даже e-mail)).

Чего не хватает SAS?

В предыдущем посте Николай рассказал про новые планируемые фичи и улучшения в линейке продуктов SAS в ближайший год. Можно заметить что довльно часто встречается словоcочетание Visual Analytics / Statistics. На демо видео примерно видно как оно работает через интерфейс браузера.

Как плюс выделено — «no coding required«. На мой взгляд это удобно только на первых порах и быстро появляется необходимость писать код.

Между написанием кода и чистым visual analytics существует (с точки зрения рабочего процесса) промежуточный слой, который можно увидеть в некоторых программах — это interactive mode. Вот этого на мой взгляд не хватает для наиболее комфортной работы в sas (для задач связанных с анализом данных). Interactive mode позволяет одновременно писать код и делать визуальный анализ «на лету», менять код/настройки и моментально получать результат, тестировать гипотезы и делать новые эксперименты. В некоторых программах это основной способ работы, например в Wolfram Language (это не реклама, сам пользовался Mathematica последний раз много лет назад):

https://www.youtube.com/watch?v=_P9HqHVPeik

С одной стороны это может быть связано со свойствами самого языка SAS Base, что его проблемно приспособить к интерактивной работе. Но с другой стороны есть уже давно SAS/IML через который можно вызывать R функции, а R в свою очередь очень хорошо справляется с интерактивностью.

Curse of dimensionality

Так называемое «проклятие размерности (curse of dimensionality)» это явление накладывающее серьзные ограничения на классификаторы основанные на оценке локальных свойств плотности вероятности наблюдений в многомерных данных. Одним из наиболее простых и интуитивно понятных методов классификации является метод k ближайших соседей. Класс к которому принадлежит объект определяется наиболее распространенным классом среди наблюдений в прилежащей локальной области:

 

Число соседей k обычно выбирается пропорциональным общему количеству наблюдений в training data set. Очень важно свойство локальности выборки. Рассмотрим одномерный случай. Допустим у нас есть 1000 равномерно распределенных наблюдений на отрезке (0,1). Для того чтобы захватить r (fraction) = 0.01 всех наблюдений в одномерном кубе (отрезок) понадобится интервал длины L = 0.01. В двумерном случае чтобы охватить тот же объем в близлежащей окрестности любого наблюдения  нам понадобится интервал длинны L =0.01^0.5 = 0.1. В 10 мерном случае 0.01 ^ 10 = 0.63 (при том что вся длина ребра 1). Как видим свойство локальности теряется. Иначе говоря, чтобы охватить 1% данных в 10 мерном пространстве для того чтобы оценить класс нового объекта нам понадобится 63% всего диапазона значений каждой переменной. Следующий код строит длинну интервала многомерного пространства (от 1 до 10) в зависимости от величины r(fraction) определяющей число наблюдений в локальной области усреднения: