Sparkの仕組み・導入メリット・インストール方法など

【目次】
・Sparkについて
・Sparkの歴史
・Sparkの仕組み
・データ分析におけるSpark導入のメリット
・Sparkの導入方法
・参考文献

Sparkについて

OSS(Open Source Software)のインメモリ処理の分散並列基盤
※インメモリ(メインメモリ上で処理するため、ディスクストレージを介するよりも高速かつ安定しているらしい。メモリに乗り切らないようなケースでも、ディスクを利用するなどしてアプリケーションが問題なく動作するように作られている。)
ビッグデータ活用を支えるプラットフォームとして注目されている。
比較の際はHadoopで言う所の、MapReduceが引き合いに出されます。MapReduceがバッチ処理に特化した仕組みになっているのに対して、Sparkはバッチ処理だけでなく、対話的な処理や繰り返し処理・ストリーミング処理といった多様なデータ処理のパターンに対応できる仕組みになっていることから、Sparkに注目が集まっています。

分散処理エンジンとして、Apache Spark Coreがあり、以下の様な機能が用意されているようです。

Spark SQL・・・SQL処理用
Spark Streaming・・・ストリーミング処理
MLib・・・機械学習処理用
 基本API
 ・統計情報の取得
 ・相関関係の算出
 ・層化抽出
 ・仮説検定
 ・ランダムデータ生成
 機械学習アルゴリズム
 ・分類回帰(SVM、ロジット、線形回帰、ナイーブベイズ、決定木、ランダムフォレスト、isotonic回帰)
 ・協調フィルタリング(ALS(Alternating Least Squares))
 ・クラスタリング(K平均法、混合ガウシアン、PIC、LDA、ストリーミングK平均法)
 ・次元削減(SVD、PCA)
 ・特徴抽出&変換(TF-IDF、Word2Vec、etc…)
 ・頻出パターンマイニング(FP-Groth、アソシエーションルール、PrefixSpan)
GraphX・・・グラフの処理
※機械学習の機能があるのは嬉しいですね。スクラッチで作るのはペインフルなので。

データソースとしては、HDFS(Hadoop Distributed File System)だけでなく、Hive、HBase、PodgreSQL、MySQL、CSVファイルなども対応している。

Sparkの歴史

2009年にUC BarkeleyのMatei Zaharia氏がScalaを用いて開発

Google Trendで検索トレンドを見たところ、2014年頃から今に至るまで伸び続けています。
GoogleTrend

Sparkの仕組み

RDD(Resilient Distributed Dataset)
不変で並列実行可能な分割されたコレクションのことを指します。
これによりユーザーが並列分散処理を意識しなくとも、それができる環境が提供されます。
こちらのRDDを
map,filter,union,flatMapなどのTransformations
で生み出し、RDDのデータを
reduce,countなどのActions
を実行することで動かします。
RDDを任意の時点でメモリやディスクに保存することもできるため、処理の再実行のみならず、同じデータを複数回利用するなど、複雑なデータ処理に関しても効率的に実行できます。
SparkはScalaという言語で書かれていますが、Python・Java・Rなどに対してAPIが提供されているので、幅広いユーザーが扱うことが可能です。しかしながら、痒いところに手を届かせるためには、Scalaの勉強は避けられないのかもしれません。実際のところ、大体のデータマイニング系エンジニアの知り合いはScalaの勉強などをしていた印象があります。

データ分析におけるSpark導入のメリット

・並列分散の手法を意識せずに大規模データの処理が可能になる。
・Rなどの苦手とする反復処理を高速化させることができる。
・データ取得、前処理、分析処理、レポーティングを一つのプラットフォームで実行できる。
・コマンドラインによるインタラクティブな試行錯誤がしやすいので、データ分析のタスクに向いている。(PythonやRのように)

※レコメンドエンジンとしてSparkを用いるケースも観察されているようです。
 Yahoo!台湾

Sparkの導入方法

ここでの導入はあくまでもプログラミングを学ぶためであって、ローカル環境での実行環境の構築ではSparkのメリットを感じることはできません。
※SparkはJava仮想マシン上で動作するため、事前にOracle JDKをインストールしておきましょう。
Java SE Development Kit 8 Downloads

■Windowsの場合
Apache Sparkで始めるお手軽リアルタイムウインドウ集計
こちらで手順が詳しく書かれています。

■Macの場合
Macの方が導入はシンプルです。
Download Spark
からダウンロードします。(SparkRはSparkのver1.4以降からサポートされているそうです。)
HOW TO INSTALL APACHE SPARK ON MAC OS X YOSEMITE
Apache Spark 1.6.0 setup on Mac OS X Yosemite
そこで、

build/mvn -Pyarn -Phadoop-2.4 -Dhadoop.version=2.4.0 -DskipTests clean package

を実行すればコンパイルできるようです。(10分ほどかかる。私は30分もかかったが。。)

そのあと、パスを通します。
PATH=/usr/local/share/spark/bin:$PATH; export PATH

それから、pythonでsparkを動かしてみます。
pyspark

を実行して、試しにReadmeのテキスト行数をカウントさせるコマンドを入力します。これは、textFileメソッドを用いて、Readmeファイルを読み込み、linesという名前のRDDを生成していることを意味します。
lines = sc.textFile(“/usr/local/share/spark/README.md”)

そして、このコマンドで値が返されたら、うまく動いていることが確認できるでしょう。
print lines.count()

加えて、ワードカウントを行うコマンドを入力します。(スペース区切りで分解し、mapメソッドで(単語, 1)という組み合わせに変換したあと、最終的にreduceByKeyで同一の単語を足し上げるという処理をしています。)

counts = lines.flatMap(lambda line: line.split(” “)) \
.map(lambda word: (word, 1)) \
.reduceByKey(lambda a, b: a + b)

そして、これで結果を取得します。
counts.collect()

スクリーンショット 2016-05-02 12.21.50

参考文献

Spark を活用する:ビッグデータアプリケーション用の高速インメモリコンピューティング

Apache Spark入門 動かして学ぶ最新並列分散処理フレームワーク (NEXT ONE)

詳解 Apache Spark

[Apache Spark]RDDについて簡単にまとめてみた

Rユーザのためのspark入門

Spark 1.4.0 の SparkR を動かす

Spark Examples

多腕バンディットモデルに関する参考文献

多腕バンディットモデルについて調べた際の文献です。

バンディットアルゴリズム入門と実践
http://www.slideshare.net/greenmidori83/ss-28443892
目的
・限られた施行回数の中で、最も良い選択をすること。
背景
・大体のことはやってみないとわからない。
・何度繰り返しても100%正しく知ることはできない。
解説
・探索(Explore)→不確実だが行ったことのない店に行ってみる。
・活用(Exploit)→実績ある行きつけの店に行く。
・探索と活用のトレードオフ
・選択肢(アーム)
・引く
 アームを選択して結果を得ること
・探索
 アームに関する情報を増やすためいアームを引くこと
・活用
 今持っている情報から最も良いアームと判断できるアームを引くこと
・epsilon-greedy
 探索と活用を確率的に行う
・epsilon-first
 ある一定期間完全に探索を行い、その後の期間は活用のみを行う
・softmax
 当たる確率の高いアームを高い確率、当たる確率の低いアームを低い確率で引くことで、探索と活用を行う
・Upper Confidence Bounds(UCB)
 アームについてどれだけ知っているかの情報を考慮に入れてアームを選択、知らないアームについて積極的に探索
・Bayes
 ベイズ確率を計算して、良いアームの確率が最も高いアームを引く
・ユーザーのクラスタに応じて、バンディットアルゴリズムで施策を打てば、one to oneマーケティングに近づけるかも

バンディットアルゴリズムによる最適化手法
https://www.oreilly.co.jp/books/9784873116273/

johnmyleswhite/BanditsBook
https://github.com/johnmyleswhite/BanditsBook

バンディットアルゴリズムによる最適化手法 4章
http://hagino3000.blogspot.jp/2014/05/banditalgo4.html

A/Bテストよりすごい?バンディットアルゴリズムとは一体何者か
http://qiita.com/yuku_t/items/6844aac6008911401b19

Bayesian Bandits – optimizing click throughs with statistics
https://www.chrisstucchio.com/blog/2013/bayesian_bandit.html

Beta-distribution Bandit
https://gist.github.com/stucchio/5383015#file-beta_bandit_test-py

雑談
先日、強化学習に明るい方の話を伺ったのですが、A/Bテストはどちらが良いかノウハウが溜まる観点からすると、良い試みなので、多腕バンディットと単純比較するのはあまりしないとおっしゃられていました。それでもやはり、最終的に良い方に表示がされるようになるはずなので、無駄の多いA/Bテストよりも、強化学習を使ってサイトとしての収益を重視した方がいいのだろうという話で落ち着きました。
アイテム数が多い場合は強化学習も大変だと思いますが、2つのクリエイティブの出し分けとかならカジュアルに実装できそうですね。

状態空間モデルに関する参考文献

  • 実行環境
  • 状態空間モデルの実行方法と実行環境の比較
    http://www.slideshare.net/hirokito/2014-esj

  • 研究事例
  • 状態空間モデルによる広告効果分析
    http://blog.albert2005.co.jp/2014/07/09/%E7%8A%B6%E6%85%8B%E7%A9%BA%E9%96%93%E3%83%A2%E3%83%87%E3%83%AB%E3%81%AB%E3%82%88%E3%82%8B%E5%BA%83%E5%91%8A%E5%8A%B9%E6%9E%9C%E5%88%86%E6%9E%90/#more-307

    状態空間モデルによる飲食店日次売上の要因分解
    http://www.ism.ac.jp/~tsuchiya/sympo/shukai03/shukai03-papers/Yamaguchi_OPT04.pdf

    ロジスティック回帰分析に関する参考文献

    ロジスティック回帰分析に関する参考文献を載せています。
    限界効果についてや、多項ロジットなどについての文献もあります。

  • Rのパッケージ
  • Package ‘mfx’
    http://cran.r-project.org/web/packages/mfx/mfx.pdf
    限界効果を計算できるmfxパッケージ。

    Package ‘mlogit’
    http://cran.r-project.org/web/packages/mlogit/mlogit.pdf
    多項ロジットを計算できる。

  • 実行例
  • R Data Analysis Examples: Logit Regression
    http://www.ats.ucla.edu/stat/r/dae/logit.htm

    R Data Analysis Examples: Multinomial Logistic Regression
    http://www.ats.ucla.edu/stat/r/dae/mlogit.htm

    テキストマイニングに関する参考文献

    テキストマイニングの入門の情報から最新の研究までを集めています。
    随時更新します。

  • 学習
  • 自然言語処理を独習したい人のために
    http://cl.sd.tmu.ac.jp/prospective/prerequisite

    確率的潜在意味解析
    http://www.gifu-nct.ac.jp/elec/deguchi/sotsuron/yoshimura/node14.html

    Probabilistic latent semantic analysis
    http://en.wikipedia.org/wiki/Probabilistic_latent_semantic_analysis

    PythonでPLSAを実装してみる
    http://satomacoto.blogspot.jp/2009/10/pythonplsa.html

    RでPLSA(PLSI)
    http://sucrose.hatenablog.com/entry/20110604/p1

  • テキストマイニング環境の構築
  • RMeCab と RCaBoCha をインストールしてみた
    http://antimon2.hatenablog.jp/entry/2012/09/02/214131

    RCaBoCha
    http://rmecab.jp/wiki/index.php?RCaBoCha

  • LDA関連
  • “トピックモデルによる統計的潜在意味解析”を読んでLDA(Latent Dirichlet Allocation)を実装しましたAdd Star
    http://d.hatena.ne.jp/echizen_tm/20150321/1426952208

    LSIやLDAを手軽に試せるGensimを使った自然言語処理入門
    http://yuku-tech.hatenablog.com/entry/20110623/1308810518

    gensimに日本語Wikipediaを取り込むためのスクリプト
    https://gist.github.com/yuku-t/1040366

  • 研究
  • 特許公報を用いた自然言語処理による業界分析、及びSpotfireによる可視化
    http://togotv.dbcls.jp/20101220.html

    メンション情報を利用したTwitterユーザープロフィール推定
    http://dbsj.org/journal/dbsj_journal_j/dbsj_journal_vol_13_no_1_1_6/
    http://dbsj.org/wp-content/uploads/2014/11/DBSJ13-1_P01-06_okutani.pdf.pagespeed.ce.ryqKKFAwd6.pdf

    誕生・使用事由によるレシピ検索~生い立ちレシピサーチ~
    http://dbsj.org/journal/dbsj_journal_j/dbsj_journal_vol_13_no_1_78_85/
    http://dbsj.org/wp-content/uploads/2014/11/DBSJ13-1_P78-85_kadowaki.pdf.pagespeed.ce.A2TxRNdZlm.pdf

    特徴トークンに注目した Smith-Waterman アルゴリズムに基づく剽窃ソースコードの自動検出手法
    http://www.it.mgmt.waseda.ac.jp/results/student1/2012-M2-Hibi.pdf

    Rstanの参考文献(インストール・使い方・実践)

    Rstanに関する情報を集めたものです。
    ・インストール
    ・使い方
    ・実践
    について載せています。
    随時更新します。

  • インストール関連
  • Windows 7にRStanをインストールする
    http://cordea.hatenadiary.com/entry/2013/11/20/201209

    Building R for Windows
    https://cran.r-project.org/bin/windows/Rtools/index.html

    【R】OSXでRStanの導入と簡単な例題【MCMC】
    http://www.fisproject.jp/2015/04/rstan/

    MCMCの計算にStanを使ってみた(超基礎・導入編)
    http://tjo.hatenablog.com/entry/2013/11/06/201735

    R stan導入公開版
    http://www.slideshare.net/KojiKosugi/r-stan

  • 使い方
  • RStan Getting Started
    https://github.com/stan-dev/rstan/wiki/RStan-Getting-Started

    Computation in R and Stan
    http://www.stat.columbia.edu/~gelman/book/software.pdf

    stan Documentation
    http://mc-stan.org/documentation/

    Stan: A Probabilistic Programming Language
    http://www.stat.columbia.edu/~gelman/research/published/stan-paper-revision-feb2015.pdf

    The Stan Modeling Language
    http://mlss2014.hiit.fi/mlss_files/2-stan.pdf

    Stanで統計モデリングを学ぶ(7): 時系列の「トレンド」を目視ではなくきちんと統計的に推定する
    http://tjo.hatenablog.com/entry/2014/12/05/190105

    Bayesian linear mixed models using Stan: A
    tutorial for psychologists, linguists, and cognitive
    scientists

    http://arxiv.org/pdf/1506.06201v1.pdf

  • 実践
  • R で 状態空間モデル: 状態空間時系列分析入門を {rstan} で再現したい
    http://sinhrks.hatenablog.com/entry/2015/05/28/071124

    書籍

    StanとRでベイズ統計モデリング (Wonderful R)

    基礎からのベイズ統計学: ハミルトニアンモンテカルロ法による実践的入門

    海外のマーケティング系ジャーナルまとめ

    今回は海外のマーケティング系ジャーナルについて簡単にまとめてみようと思います。

    海外のマーケティング系ジャーナルとして、評価の高いものは一体何なのか、そして、そのジャーナルの特色は何なのか、少しでも説明できれば幸いです。

    まず参考としたものが、海外のマーケティング系ジャーナルをランキング化したサイトです。
    A Ranking of Marketing Journals
    これはそもそも誰が集計してランキング化したのか気になったので、見てみると、
    Michigan State UniversityのG. Tomas M. Hultさん
    University of North AlabamaのWilliam T. Neeseさん
    University of Arkansas at Little RockのR. Edward Bashawさん

    (1) importance/prestige index
    (2) popularity/familiarity index
    という指標をもとにランキングしたもののようです。
    ランキングの元となったデータのサンプルは1000人の学術関係者だそうです。
    一旦、このランキングを信じることにしましょう!
    今回はこのランキングの云々はあまり重要ではないので。

    本題のジャーナルですが今回はランキング上位の4つを紹介したいと思います。
    (1)Journal of Marketing
    (2)Journal of Marketing Research
    (3)Journal of Consumer Research
    (4)Marketing Science
    の計4つです。

    (1)Journal of Marketing
    ・1936年創刊
    ・マーケティング系ジャーナルのリーダー的存在
    ・マーケティングやマーケティングマネジメントの重要な問題に焦点を当てたマーケティングの原理に関するプレミアムかつ幅広い学術雑誌
    ・ジャーナルのモチベーション
     理論と実践とのギャップの解消
     学術関係者と実務家の両方に共有されうる情報
     教育機関、製造業、金融業、ヘルスケアなどの産業で働くマーケターに読んでもらいたい。

    ・取り上げられる論文
     マーケティング問題に対する解法となる新しい手法の提示
     マーケティングのトレンドや発展を調査報告
     一般化や検証結果の提示
     新しいアイデアや理論、マーケティングの理論と実践に関する俯瞰的な情報

    (2)Journal of Marketing Research
    ・マーケティング哲学・概念・理論から、手法・技術・応用までをテーマとしている。
    ・出版は臨月
    ・対象はリサーチアナリスト、教育者、統計家となっている。
    ・ジャーナルのモチベーション
     職業の最前線、最先端の情報の収集を求めているマーケティングリサーチ学問家や実務 家向けの情報の提供し、マーケティングリサーチ全体の流れを伝える。
     扱われる論文としては、マーケティング課題の解決に関する新しい技術の概念、手法、応用などがある。理論だけでなく、経験に基づいたマーケティングノウハウが示されて いる。

    (3)Journal of Consumer Research
    ・1974年創刊
    ・消費者行動の説明・描写に関する学術研究が中心。
    ・経験的、理論的、方法論的な論文からなり、分野としては心理学、マーケティング、社会学、経済学、コミュニケーション学、人類学がこのジャーナルでは扱われる。
    ・経営的な話よりも、学問的な内容である。
     内容としては、ミクロレベル(ブランド選択など)からマクロレベル(唯物論的な価値の発展)まで幅広い。
    ・理論や統計学などに固執せずに幅広い知識が得られるかもしれません。

    (4)Marketing Science
    ・マーケティングサイエンスはオペレーションズ・リサーチとマネジメント・サイエンスの研究機関。
    ・経験的、理論的な定量的なマーケティングリサーチに焦点を当てています。
    ・オペレーションズリサーチに重きを置いていたりするので、数学が好きな人には丁度良いかもしれません。

    各々の読み比べをしていないので、あまりレベル感がわからないですが、時間の許す限り、マーケティングのTopジャーナルであるこれら4大ジャーナルを読んで行きながら各々の明確な役割の違いを体感していこうと思います。

    サポートベクターマシン(SVM)のまとめ・参考文献

    今回はサポートベクターマシン(Support Vector Machine:SVM)の学習に当たって、見つけた参考文献を列挙していこうと思います。

  • ブログ系
  • R言語でSVM(Support Vector Machine)による分類学習
    無料で利用できる統計解析ソフトRを用いてサポートベクターマシンについて紹介してくれているブログです。

    SVMの定番入門書「サポートベクターマシン入門(赤本)」の読み方
    サポートベクターマシンを学習する上で役に立つ文献を紹介してくれています。

    ところでサポートベクターマシンって何なの?
    プログラムのコードと実践例が記されています。ただしコードはjavaの様です。

    SVM を使うと,なにが嬉しいの?
    サポートベクターマシンの手法としてのモチベーションが記されています。

    SVMの最大の特徴は「マージン最大化」にある

    識別境界の位置を決定する明確な基準を持っており、学習データの中で最も他クラスと近い位置にいるものを基準として、そのユークリッド距離が最も大きくなるような位置に識別境界を設定する。明確な基準を与えているということ自体、ノンパラメトリックな手法では他に例のないことで、SVMの最も優れた部分とされる。

    Rとカーネル法・サポートベクターマシン
    Rを用いたサポートベクターマシンの実践例が載ってあります。同志社大学のページなので、ちょっと信用度が高いかも。

    SVMを使いこなす!チェックポイント8つ
    ・スケーリング(特徴量の修正)
    ・カテゴリ特徴量(ダミー変数の作成)
    ・カーネル関数
    ・パラメータ
    ・クロスバリデーション
    ・不均衡データ問題(パラメータC(コスト)を大きくする、データ数を揃える、アンダーorオーバーサンプリング)
    ・多クラス分類
    ・アンサンブル学習

  • 論文・レポート系
  • サポートベクターマシン入門
    産業技術総合研究所のレポートです。大変わかりやすい記述です。

    痛快!サポートベクトルマシン : 古くて新しいパターン認識手法
    ちょっと短めで、かつ古いのですが、大まかな流れをサクッと掴むには向いていると思います。

    サポートベクターマシンによる倒産予測
    卒業論文ですね。

    企業格付判別のための SVM 手法の提案および逐次ロジットモデルとの比較による有効性検証
    http://www.orsj.or.jp/~archive/pdf/j_mag/Vol.57_J_092.pdf

  • スライド系
  • SVMについて
    2クラスの分類しか記されていませんが、きれいにまとまった資料だと思います。

    メモ

    SVM
    利点
     ・データの特徴の次元が大きくなっても識別精度が良い
     ・最適化すべきパラメータが少ない
     ・パラメータの算出が容易

    欠点
     ・学習データが増えると計算量が膨大になる
      (「次元の呪い」の影響が顕著)
     ・基本的には2クラスの分類にしか使えない