Развитие банковских сервисов и продуктов с учетом требований регулятора
Исследование рынка банковских программ. Анализ эффективности различных рекомендательных алгоритмов. Обзор имеющихся подходов выработки рекомендаций. Архитектура разрабатываемой системы. Методы коллаборативной фильтрации. Использование контентных методов.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | курсовая работа |
Язык | русский |
Дата добавления | 31.08.2016 |
Размер файла | 678,2 K |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
· случайный выбор объекта (для сравнения со всеми другими)
· “популярные” объекты - на основании коэффициента корреляции Пирсона, исключая предметы, которые пользователь уже выбирал
· user-based коллаборативная фильтрация
· ассоциативные правила
ROC-анализ показал, что на уровне 5 ближайших объектов/соседей разницы между ведущими алгоритмами нет. На уровне анализа в 20 ближайших объектов/соседей чуть лучше ведет себя user-based коллаборативная фильтрация. Такие результаты могли получится вследствие эндогенности. То есть данные представляют собой не просто срез, а временные ряды, предпочтения людей меняются со временем и необходимо введение дополнительных переменных в анализ.
Рис. 5. Сравнение результатов работы алгоритмов
Также стоит отметить, что по этим же причинам существенно проигрывают ассоциативные правила (которые в основном используются в задаче анализа рыночной корзины “market basket analysis”).
Рис. 6. Сравнение результатов работы алгоритмов
7. Контентные методы
Для успешной работы с новыми покупателями, привлечения наиболее релевантной аудитории в магазин, необходимо дополнить рекомендательную систему, использующую методы коллаборативной фильтрации контентным подходом. Нужно задействовать имеющийся профиль пользователя и данные о покупках в других магазинах, чтобы формировать релевантные предложения новому покупателю. Однако, сегментация покупателей и создание профилей полезны не только для решения проблемы «холодного старта», но и для оценки лояльности пользователей, выявления склонных к оттоку постоянных клиентов.
Можно улучшать работу с клиентами, опираясь на анализ типов лояльности и восприимчивость к предложениям, корректируя их с точки зрения максимизации дохода и развития бизнеса. Угадывание потребности позволяет делать более выгодные предложения и получать большую прибыль. Нужно учитывать участие в маркетинговых мероприятиях, реакцию на информационные сообщения, контекст потребления. Однако, основная сложность связана с тем, что сегменты, выделенные на основе анализа прибыльности клиентов, не совпадают полностью с сегментами, сформированными по демографическим признакам.
Скидки нужно предоставлять клиентам, учитывая их ценность для компании, иначе затраты на их удержание могут превысить доходы от работы с ними. Тем более приверженность клиентов конкретной компании по факту определяется не только активными действиями торговых компаний по их удержанию и полезными персональными предложениями, но и совершенно другими факторами, среди которых можно отметить: местоположение магазина, цены товаров, их качество, уровень сервиса и др.
Решается задача выбора оптимального предложения путем определения характеристик потенциального предложения и выявления покупателей, которые соответствуют этим характеристикам. Классификационная модель определяет принадлежность покупателя по ряду признаков его поведения к одному из классов (откликнется или нет). В результате построения классификационных моделей на основе данных о пользователях и их реакциях на предыдущие предложения были определены характеристики покупателей, склонных к отклику. Традиционно, строится несколько моделей, после чего определяется наиболее точная. Для анализа мною было построено 2 модели при помощи различных методов на одинаковом наборе данных. Следующий этап после построения моделей - это оценка их точности на контрольных выборках по нескольким критериям.
Переменные, которые используются для создания выборки:
· Age - возраст клиента;
· Job - сфера деятельности;
· Marital - семейное положение;
· Education - уровень образования;
· Default - результат выдачи предыдущего банковского займа;
· Balance - количество денег на всех счетах
· Housing - тип жилья;
· Loan - есть ли сейчас долг;
· Contact - канал взаимодействия, по которому клиент узнал об акции;
· Day - день, в который произошел контакт;
· Month - месяц, в который произошел контакт;
· Duration - количество дней до конца предложения с момента контакта;
· Campaign - тип предложения, который использовался
· Pdays - сколько дней назад была проведена более ранняя кампания;
· Previous - тип более ранней кампании;
· Poutcome - результат проведения более ранней кампании;
· Y - воспользуется ли клиент предложением, зависимая переменная;
Для быстрой выработки основных правил использовался метод деревьев решений, основанный на алгоритме ID3 с использованием энтропии. Так как в наборе данных 17 переменных, не многие из которых коррелируют друг с другом, то оптимальная глубина дерева установилась на уровне 4, что обеспечивает приемлемую скорость выработки первичных результатов. Встроенный метод анализа сам делает решение о включении в модель наиболее важных предикторов. Созданная модель легко интерпретируется, хорошо обрабатывает пропущенные значения и быстро обучается. К недостаткам такого подхода можно отнести ограничения по точности и плохую работу при большом количестве предикторов.
Случайные леса относятся к числу наиболее точных и популярных алгоритмов, представляющий собой ансамбль моделей, основанный на деревьях решений с последующим голосованием за лучший результат. Такой метод очень эффективен при большом количестве предикторов, хорошо параллелится и работает с пропущенными данными. Однако, этот метод требует больших затрат ресурсов и времени.
Для того, чтобы уменьшить требования по памяти и мощностям процессора, мною учитывалась слабая корреляция, которая позволила отобрать на основе корреляции только необходимые независимые переменные. Сократив число предикторов, уровень корреляции остался тем же, обеспечивая такое же качество классификации.
Таким образом, алгоритм случайных деревьев показал наилучший баланс полноты и точности. Нужно отметить, что он достаточно жадный до ресурсов, но хорошо проявляет себя при параллельной обработке данных и масштабируется. Прикладная ценность данной работы заключается в возможность воздействовать на покупателей адресным предложением, не надоедая частотой. В итоге для покупателей с различными характеристиками были разработаны специальные предложения, которые имеют индивидуальный характер.
Заключение
банковский программа алгоритм коллаборативный
В результате была изучена рыночная ситуация, выделены наиболее перспективные области развития банковских сервисов и продуктов с учетом требований регулятора. Был произведен анализ данных, к которым получит доступ новый агент и выявлены возможности их использования. Последующая настройка рабочих сред для реализации проекта: развертывание и настройка серверов для хранения данных и анализа, позволили разработать программный продукт для трансформации сырых данных и их обработки средствами интеллектуального анализа. Было произведено сравнение коллаборативных алгоритмов на тестовых данных и разработана контентная модель, основанная на банковских данных о пользователе и результате предыдущих кампаний.
Конкретная техническая реализация заключается в создании автором программы формирования рекомендаций на языке R и дополнении ее результатами контентной модели, реализованной на языке Scala на программной платформе Apache Spark. Практическая значимость такого сервиса состоит в возможности улучшения пользовательского опыта, расширения знаний о клиенте банка и торговцев, создания открытого сервиса для наилучшей утилизации данных сторонними разработками и экономии на эмиссии банковских карт и карт лояльности.
За последние годы был совершен значительный прогресс в развитии рекомендательных систем. Были предложены контентные, коллаборативные и гибридные алгоритмы выработки рекомендаций. Некоторые системы нашли практическое применение в коммерческой индустрии. Тем не менее, несмотря на прогресс, для более эффективной работы в большом списке приложений современное поколение рекомендательных систем требует дальнейших улучшений.
Все еще существуют различные ограничения, с которыми сталкиваются современные рекомендательные методы, для которых описаны необходимые улучшения, способные сделать работу банка и ритейлера более эффективной. К таким улучшениям относятся, в ряду прочих, усовершенствованное моделирование пользователей и товаров, включение контекстной информации в рекомендательный процесс.
Возможно, хранение контекстной информации сделает возможным расширение рекомендательной системы и полноценной реализации концепции customer journey.
Список использованных источников
1. Big Data Alchemy: How can Banks Maximize the Value of their Customer Data? / Capgemini Consulting, 2014 - 16 стр.
2. D. Jannach, M. Zanker, A. Felfernig, G. Friedrich Recommender Systems. An Introduction. New York: Cambridge University Press 32 Avenue of the Americas, 2011. 352 P.
3. F. Ricci, L. Rokach, B. Shapira, P.B. Kantor Recommender Systems Handbook. Springer, 2011. 842 P.
4. G. Miner, R. Nisbet, J. Elder IV Handbook of Statistical Analysis and Data Mining Applications. - 1 изд. Elsevier Publishing, 2009.
5. GlowByte Consulting внедрила IBM Campaign в ОТП Банке [Электронныи? ресурс] / Пресс-центр GlowByte Consulting. Режим доступа: http://gbconsulting.ru/about/press-center/company-news/2015/08/13/glowbyte-vnedril-ibm-campaign-otp-bank/, свободныи?. (дата обращения: 13.07.15).
6. Joshua D. Suereth. Scala in Depth// Manning, 2012.
7. Kemp, Simon. «Digital in 2016» We Are Social. N.p., 27 Jan. 2016. Web. / http://wearesocial.com/uk/special-reports/digital-in-2016
8. Mike Frampton. Mastering Apache Spark // Packt Publishing. 2015.
9. P. Melville, V. Sindhwani Recommender systems. Encyclopedia of Machine Learning. 2010.
10. R Graphics Cookbook / Winston Chang. - USA: O'Reilly, 2012 - 522 с.
11. Cay Horstmann. Scala for the Impatient, Basic Classifiers// Addison-Wesley 2012.
12. Shalizi С. Categorizing Data Vectors Types of Categorization, Basic Classifiers, Finding Simple Clusters in Data // Data Mining. 2009.
13. Social Link [Электронныи? ресурс] /НБКИ. Режим доступа: http://www.nbki.ru/servicescredit/social/connections/ свободныи?. (дата обращения: 13.05.15).
14. T. Hastie, R. Tibshirani, J. Friedman The Elements of Statistical Learning: Data Mining, Inference, and Prediction. - Second Edition. Springer, 2009.
15. U. von Luxburg, S. Ben-David Towards a Statistical Theory of Clustering // School of Computer Science, University of Waterloo, Canada. - 2015.
16. Y. Koren Collaborative Filtering with Temporal Dynamics. KDD'09. 2009
17. X. Su, T.M. Khoshgoftaar Survey of Collaborative Filtering Techniques. Advances in Artificial Intelligence. 2009.
18. W.P. Jones, G.W. Furnas Pictures of Relevance: A Geometric Analysis of Similarity Measures. Journal of the American society for information science. 1987.
19. А. Гомзин, А. Коршунов Системы рекомендаций: обзор современных подходов. Препринт. Москва: Труды Института системного программирования РАН. 2012. 20 С.
20. Банк УРАЛСИБ развивает маркетинговую платформу с помощью IBM Contact Optimization [Электронныи? ресурс] / Пресс-центр GlowByte Consulting. Режим доступа: http://gbconsulting.ru/about/press-center/company-news/2015/05/12/bank-uralsib-razvivaet-marketingovuyu-platformu-s-ibm-contact-optimization/, свободныи?. (дата обращения: 12.03.16).
21. Банк "Открытие" внедрил решение HP Vertica для анализа big data [Электронныи? ресурс] / Пресс-центр банка Открытиe. Режим доступа: https://www.openbank.ru/about/press/721/, свободныи?. (дата обращения: 12.03.16).
22. Бинбанк присоединился к числу пользователей биржи данных [Электронныи? ресурс] / CleverDATA. Режим доступа: http://cleverdata.ru/binbank-birzha/, свободныи?. (дата обращения: 12.03.16).
23. Большие данные не стали мэйнстримом в российских банках [Электронныи? ресурс] / Cnews. Режим доступа: http://www.cnews.ru/news/top/bolshie_dannye_ne_stali_mejnstrimom/, свободныи?. (дата обращения: 16.02.16).
24. Воронцов К. В. Методы кластеризации // 2015.
25. Заготовка килобайтов банками [Электронныи? ресурс] / Коммерсантъ. Режим доступа: http://www.kommersant.ru/doc/2609914, свободныи?. (дата обращения: 13.07.15).
26. Искусственный интеллект может не только экономить, но и зарабатывать [Электронныи? ресурс] / Bankir.ru. Режим доступа: http://bankir.ru/publikacii/20160422/iskusstvennyi-intellekt-mozhet-ne-tolko-ekonomit-no-i-zarabatyvat-10007471/, свободныи?. (дата обращения: 1.01.16).
27. Исследование рынка банковских программ лояльности 2015 / Frank Research Group, 2015 - 45 стр.
28. Как устроен рынок big data в России [Электронныи? ресурс] / Rusbase. Режим доступа: http://rusbase.com/howto/big-data-in-russia/, свободныи?. (дата обращения: 13.03.16).
29. Когда данных слишком много: банки на передовой Big Data [Электронныи? ресурс] / Slon. Режим доступа: https://slon.ru/specials/data-economics/articles/bankiri/, свободныи?. (дата обращения: 07.02.16).
30. Количество платежных карт, эмитированных кредитными организациями, по типам карт [Электронныи? ресурс] / Центральный банк РФ. Режим доступа: http://www.cbr.ru/statistics/p_sys/print.aspx?file=sheet013.htm, свободныи?. (дата обращения: 10.01.16).
Приложение 1
Настройка программной среды.
sudo apt-add-repository ppa:webupd8team/java
sudo apt-get update
sudo apt-get install oracle-java8-installer
java -version
wget http://www.scala-lang.org/files/archive/scala-2.11.8.deb
sudo dpkg -i scala-2.11.8.deb
sudo apt-get install scala
cd ~
sudo cat >>.bashrc
export SCALA_HOME=/usr/local/src/scala/scala-2.11.8
export PATH=$SCALA_HOME/bin:$PATH
sudo apt-get install git
wget http://apache-mirror.rbc.ru/pub/apache/spark/spark-1.6.0/spark-1.6.0.tgz
tar -xvf spark-1.6.0.tgz
cd spark-1.6.0
sbt/sbt assembly
Spark Web UI
It is needed to open port 8080 via Azure VM endpoints for our VM
Spark Standalone cluster comes with administrative web UI
Our working environment: http://sparklyapina.cloudapp.net:8080
sudo apt-get install vsftpd
sudo vi /etc/vsftpd.conf
local_enable=YES
write_enable=YES
anonymous_enabled=NO
pasv_enable=YES
pasv_address=[Your public address]
pasv_min_port=12000
pasv_max_port=12003
sudo service vsftpd restart
sudo sh -c 'echo "deb http://cran.rstudio.com/bin/linux/ubuntu trusty/" >> /etc/apt/sources.list'
gpg --keyserver keyserver.ubuntu.com --recv-key E084DAB9
gpg -a --export E084DAB9 | sudo apt-key add -
sudo apt-get update
sudo apt-get -y install r-base
sudo apt-get -y build-dep libcurl4-gnutls-dev
sudo apt-get -y install libcurl4-gnutls-dev
sudo apt-get install libxml2-dev
sudo apt-get install gdebi-core
sudo apt-get install libapparmor1 # Required only for Ubuntu, not Debian
wget http://download2.rstudio.org/rstudio-server-0.98.1103-amd64.deb
sudo gdebi rstudio-server-0.98.1103-amd64.deb
Приложение 2
Коллаборативная фильтрация.
data <- read.csv(file="Data.csv")
data$X <- NULL
Удаляем столбец с номерами пользователей
data.ibs <- (data[,!(names(data) %in% c("X", "user"))])
getCosine <- function(x,y)
{
this.cosine <- sum(x*y) / (sqrt(sum(x*x)) * sqrt(sum(y*y)))
return(this.cosine)
}
Сравним между собой сами страницы и составим матрицу их схожести:
data.ibs.similarity <- matrix(NA, nrow=ncol(data.ibs), ncol=ncol(data.ibs),
dimnames=list(colnames(data.ibs), colnames(data.ibs)))
for(i in 1:ncol(data.ibs)) {
Loop through the columns for each column
for(j in 1:ncol(data.ibs)) {
Fill in placeholder with cosine similarities
data.ibs.similarity[i,j] <- getCosine(as.matrix(data.ibs[i]),as.matrix(data.ibs[j])) }}
data.ibs.similarity <- as.data.frame(data.ibs.similarity)
data.neighbours<-matrix(NA,nrow=ncol(data.ibs.similarity),ncol=11,dimnames=list(colnames(data.ibs.similarity)))
for(i in 1:ncol(data.ibs)){
data.neighbours[i,]<-(t(head(n=11,rownames(data.ibs.similarity[order(data.ibs.similarity[,i],decreasing=TRUE),][i])))) }
sumproduct(purchaseHistory, similarities)/sum(similarities).
getScore <- function(history, similarities)
{
x <- sum(history*similarities)/sum(similarities)
}
holder<-matrix(NA,nrow=nrow(data),ncol=ncol(data)-1,dimnames=list((data$user),colnames(data[-1])))
for(i in 1:nrow(holder))
{
Пробегаемся по объектам-колонкам
for(j in 1:ncol(holder))
{
Считываем из ячейки объект и пользователя
user <- rownames(holder)[i]
product <- colnames(holder)[j]
Делаем пустой строкой те колонки, которые пользователь уже купил
if(as.integer(data[data$user==user,product]) == 1)
{
holder[i,j]<-""
} else {
Используем уровень похожести в 10 пользователей
topN<-((head(n=11,(data.ibs.similarity[order(data.ibs.similarity[,product],decreasing=TRUE),][product]))))
topN.names <- as.character(rownames(topN))
topN.similarities <- as.numeric(topN[,1])
Удаляем первого, потому что у него будет похожесть, равная 1
topN.similarities<-topN.similarities[-1]
topN.names<-topN.names[-1]
Смотрим историю пользователя за 10 покупок
topN.purchases<- data[,c("user",topN.names)]
topN.userPurchases<-topN.purchases[topN.purchases$user==user,]
topN.userPurchases <- as.numeric(topN.userPurchases[!(names(topN.userPurchases) %in% c("user"))])
Считаем рейтинг объекта и пользователя
holder[i,j]<-getScore(similarities=topN.similarities,history=topN.userPurchases)
data.user.scores <- holder
Проранжируем наши рекомендации:
data.germany.user.scores.holder<-matrix(NA,nrow=nrow(data.germany.user.scores),ncol=100,dimnames=list(rownames(data.germany.user.scores)))
for(i in 1:nrow(data.germany.user.scores))
{
data.germany.user.scores.holder[i,]<-names(head(n=100,(data.germany.user.scores[,order(data.germany.user.scores[i,],decreasing=TRUE)])[i,]))
}
Приложение 3
Алгоритм формирования дерева решений.
//Decision Trees
val datadir = "/home/azureuser/data"
//Create a SQL Context from Spark context
val sqlContext = new org.apache.spark.sql.SQLContext(sc)
import sqlContext.implicits._
//Load the CSV file into a RDD
val bankData = sc.textFile(datadir + "/bank.csv")
bankData.cache()
bankData.count()
//Remove the first line (contains headers)
val firstLine=bankData.first()
val dataLines = bankData.filter(x => x != firstLine)
dataLines.count()
//Convert the RDD into a Dense Vector
//Change labels to numeric ones
import org.apache.spark.mllib.linalg.{Vector, Vectors}
import org.apache.spark.mllib.regression.LabeledPoint
def transformToNumeric( inputStr: String): Vector = {
val attList=inputStr.split(";")
val age=attList(0).toFloat
//convert outcome to float
val outcome = attList(16).contains("no") match {
case true => 1.0
case false => 0.0
}
//create indicator variables for single/married
val single = attList(2).contains("single") match {
case true => 1.0
case false => 0.0
}
val married = attList(2).contains("married") match {
case true => 1.0
case false => 0.0
}
val divorced = attList(2).contains("divorced") match {
case true => 1.0
case false => 0.0
}
//create indicator variables for education
val primary = attList(3).contains("primary") match {
case true => 1.0
case false => 0.0
}
val secondary = attList(3).contains("secondary") match {
case true => 1.0
case false => 0.0
}
val tertiary = attList(3).contains("tertiary") match {
case true => 1.0
case false => 0.0
}
//convert default to float
val default = attList(4).contains("no") match {
case true => 1.0
case false => 0.0
}
//convert balance amount to float
val balance = attList(5).contains("no") match {
case true => 1.0
case false => 0.0
}
//convert loan to float
val loan = attList(7).contains("no") match {
case true => 1.0
case false => 0.0
}
//Filter out columns not wanted at this stage
val values= Vectors.dense(outcome, age, single, married,
divorced, primary, secondary, tertiary,
default, balance, loan )
return values
}
//Change to a Vector
val bankVectors = dataLines.map(transformToNumeric)
bankVectors.cache()
bankVectors.collect()
//Statistical Analysis
import org.apache.spark.mllib.stat.{MultivariateStatisticalSummary, Statistics}
val bankStats=Statistics.colStats(bankVectors)
bankStats.min
bankStats.max
val colMeans=bankStats.mean
val colVariance=bankStats.variance
val colStdDev=colVariance.toArray.map( x => Math.sqrt(x))
Statistics.corr(bankVectors)
//Transform to a Data Frame
//Drop columns with low correlation
def transformToLabelVectors(inStr: Vector ): (Float,Vector) = {
val values = ( inStr(0).toFloat,
Vectors.dense(inStr(1),inStr(2),inStr(3),
inStr(4),inStr(5),inStr(6),inStr(7),
inStr(8),inStr(9),inStr(10)))
return values
}
val bankLp = bankVectors.map(transformToLabelVectors)
bankLp.collect()
val bankDF = sqlContext.createDataFrame(bankLp).toDF("label","features")
bankDF.select("label","features").show(10)
//Indexing needed as pre-req for Decision Trees
import org.apache.spark.ml.feature.StringIndexer
val stringIndexer = new StringIndexer()
stringIndexer.setInputCol("label")
stringIndexer.setOutputCol("indexed")
val si_model = stringIndexer.fit(bankDF)
val indexedBank = si_model.transform(bankDF)
indexedBank.select("label","indexed","features").show()
indexedBank.groupBy("label","indexed").count().show()
//Split into training and testing data
val Array(trainingData, testData) = indexedBank.randomSplit(Array(0.9, 0.1))
trainingData.count()
testData.count()
import org.apache.spark.ml.classification.DecisionTreeClassifier
import org.apache.spark.ml.evaluation.MulticlassClassificationEvaluator
//Create the model
val dtClassifier = new DecisionTreeClassifier()
dtClassifier.setMaxDepth(4)
dtClassifier.setLabelCol("indexed")
val dtModel = dtClassifier.fit(trainingData)
dtModel.numNodes
dtModel.depth
//Predict on the test data
val predictions = dtModel.transform(testData)
predictions.select("prediction","indexed","label","features").show()
val evaluator = new MulticlassClassificationEvaluator()
evaluator.setPredictionCol("prediction")
evaluator.setLabelCol("indexed")
evaluator.setMetricName("precision")
evaluator.evaluate(predictions)
//Draw a confusion matrix
predictions.groupBy("indexed","prediction").count().show()
Приложение 4
Алгоритм формирования случайного леса.
//RandomForests
val datadir = "/home/azureuser/data"
//Create a SQL Context from Spark context
val sqlContext = new org.apache.spark.sql.SQLContext(sc)
import sqlContext.implicits._
//Load the CSV file into a RDD
val bankData = sc.textFile(datadir + "/bank.csv")
bankData.cache()
bankData.count()
//Remove the first line because of headers
val firstLine=bankData.first()
val dataLines = bankData.filter(x => x != firstLine)
dataLines.count()
//Convert the RDD into a Dense Vector
//Change labels to numeric ones
import org.apache.spark.mllib.linalg.{Vector, Vectors}
import org.apache.spark.mllib.regression.LabeledPoint
def transformToNumeric( inputStr: String): Vector = {
val attList=inputStr.split(";")
val age=attList(0).toFloat
//convert outcome to float
val outcome = attList(16).contains("no") match {
case true => 1.0
case false => 0.0
}
//create indicator variables for single/married
val single = attList(2).contains("single") match {
case true => 1.0
case false => 0.0
}
val married = attList(2).contains("married") match {
case true => 1.0
case false => 0.0
}
val divorced = attList(2).contains("divorced") match {
case true => 1.0
case false => 0.0
}
//create indicator variables for education
val primary = attList(3).contains("primary") match {
case true => 1.0
case false => 0.0
}
val secondary = attList(3).contains("secondary") match {
case true => 1.0
case false => 0.0
}
val tertiary = attList(3).contains("tertiary") match {
case true => 1.0
case false => 0.0
}
//convert default to float
val default = attList(4).contains("no") match {
case true => 1.0
case false => 0.0
}
//convert balance amount to float
val balance = attList(5).contains("no") match {
case true => 1.0
case false => 0.0
}
//convert loan to float
val loan = attList(7).contains("no") match {
case true => 1.0
case false => 0.0
}
//Filter out columns not wanted at this stage
val values= Vectors.dense(outcome, age, single, married,
divorced, primary, secondary, tertiary,
default, balance, loan )
return values
}
//Change to a Vector
val bankVectors = dataLines.map(transformToNumeric)
bankVectors.cache()
bankVectors.collect()
//Statistical Analysis
import org.apache.spark.mllib.stat.{MultivariateStatisticalSummary, Statistics}
val bankStats=Statistics.colStats(bankVectors)
bankStats.min
bankStats.max
val colMeans=bankStats.mean
val colVariance=bankStats.variance
val colStdDev=colVariance.toArray.map( x => Math.sqrt(x))
Statistics.corr(bankVectors)
//Transform to a Data Frame
//Drop columns with low correlation
def transformToLabelVectors(inStr: Vector ): (Float,Vector) = {
val values = ( inStr(0).toFloat,
Vectors.dense(inStr(1),inStr(2),inStr(3),
inStr(4),inStr(5),inStr(6),inStr(7),
inStr(8),inStr(9),inStr(10)))
return values
}
val bankLp = bankVectors.map(transformToLabelVectors)
bankLp.collect()
val bankDF = sqlContext.createDataFrame(bankLp).toDF("label","features")
bankDF.select("label","features").show(10)
//PCA
import org.apache.spark.ml.feature.PCA
val bankPCA = new PCA()
bankPCA.setK(3)
bankPCA.setInputCol("features")
bankPCA.setOutputCol("pcaFeatures")
val pcaModel = bankPCA.fit(bankDF)
val pcaResult = pcaModel.transform(bankDF).select("label","pcaFeatures")
pcaResult.show()
//Indexing for Decision Trees
import org.apache.spark.ml.feature.StringIndexer
val stringIndexer = new StringIndexer()
stringIndexer.setInputCol("label")
stringIndexer.setOutputCol("indexed")
val si_model = stringIndexer.fit(pcaResult)
val indexedBank = si_model.transform(pcaResult)
indexedBank.select("label","indexed","pcaFeatures").show()
//Split: training and testing data
val Array(trainingData, testData) = indexedBank.randomSplit(Array(0.9, 0.1))
trainingData.count()
testData.count()
import org.apache.spark.ml.classification.RandomForestClassifier
import org.apache.spark.ml.evaluation.MulticlassClassificationEvaluator
//Create the model
val rmClassifier = new RandomForestClassifier()
rmClassifier.setLabelCol("indexed")
rmClassifier.setFeaturesCol("pcaFeatures")
val rmModel = rmClassifier.fit(trainingData)
//Predict on the test data
val predictions = rmModel.transform(testData)
predictions.select("prediction","indexed","label","pcaFeatures").show()
val evaluator = new MulticlassClassificationEvaluator()
evaluator.setPredictionCol("prediction")
evaluator.setLabelCol("indexed")
evaluator.setMetricName("precision")
evaluator.evaluate(predictions)
//Draw a confusion matrix
predictions.groupBy("indexed","prediction").count().show()
Размещено на Allbest.ru
Подобные документы
Особенности создания набора web-сервисов, учитывающих функцию кредитоспособности покупателя. Учет возможности управления статусом заказа. Анализ функциональной декомпозиции системы. Использование разработанных сервисов и технологий, их эффективность.
курсовая работа [2,0 M], добавлен 24.02.2012Методы проектирования систем автоматического управления: экспериментальный и аналитический. Моделирование замкнутой системы управления. Системы в динамике: слежение, стабилизация, алгоритм фильтрации. Математические модели систем, воздействий, реакция.
контрольная работа [522,9 K], добавлен 05.08.2010Характеристика предприятия ТОО "Com Sales Group". Составление программ на языке программирования. Составление алгоритмов, разработка численных методов решения задач. Методы откладки программ. Анализ технологии машинной обработки экономической информации.
отчет по практике [1,3 M], добавлен 19.04.2016Обзор математических методов распознавания. Общая архитектура программы преобразования автомобильного номерного знака. Детальное описание алгоритмов: бинаризация изображения, удаление обрамления, сегментация символов и распознавание шаблонным методом.
курсовая работа [4,8 M], добавлен 22.06.2011Обзор основных алгоритмов и методов распознавания лиц. Архитектура средств динамического отслеживания лиц в видеопоследовательности. Результаты тестирования на больших объемах видеоданных. Разработка алгоритмов и методов динамического отслеживания лиц.
дипломная работа [5,9 M], добавлен 20.07.2014Требования к функциональным характеристикам разрабатываемой автоматизированной системы. Системы управления обучением. Обзор средств разработки, серверов, СУБД. Применение модели "сущность-связь", ее преимущества. Архитектура программного средства.
курсовая работа [900,7 K], добавлен 07.07.2012Краткая характеристика объекта управления, обзор и анализ существующих аналогов, реализующих его функции. Разработка архитектуры программной системы, тестирование и оценка эффективности приложения. Развертывание и использование программного продукта.
курсовая работа [691,0 K], добавлен 05.02.2015Обзор существующих моделей параллельного программирования, основные средства отладки эффективности MPI-программ, общие проблемы всех средств трассировки. Создание экспериментальной системы отладки эффективности MPI-программ, этапы работы анализатора.
дипломная работа [767,2 K], добавлен 14.10.2010Изучение методики учета банковских и финансовых операций в бюджетной организации. Описание программных средств и разработка автоматизированной информационной системы по учету банковских операций. Характеристика алгоритма и блок-схемы АИС организации.
дипломная работа [1,6 M], добавлен 24.09.2012Анализ программ для фильтрации сайтов. Проектирование системы, предупреждающей пользователя о наличии опасности при просмотре текущих страниц Интернета. Архитектура и компоненты системы. Программное и аппаратное обеспечение. Инструкция по установке.
дипломная работа [665,4 K], добавлен 10.07.2012