Dec 31, 2017

Throw Back 2017


On
今年はデータ系の技術に下から上まで触れることが出来たかなーと思います。仕事ではないもののPrestoにコントリビュートし始め、TeradataやAster on Hadoopのインプリメンテーション、経営管理PJのBI導入などなど。ただ技術領域がDB(SQL)に寄りすぎてプログラミング能力が衰えてきた感は否めないので、来年はそちらにも力を入れていくつもりです。TCPP(Teradata Certified Professional Program)は約半年に1つのペースで取得してますが、来年は3つを目標にします。
Off
去年に比べると本や映画を観る量が後半になるにつれかなり減っていて、なんとなく余裕がなかったのかもと振り返って見て思い始めました。食生活面はわりと毎日同じものを食べるような偏食気味だったんですが、だいぶ改善されてきました。最近オーブンレンジの使い方を会得したので、ケーキやクッキーなどのデザートも作ってみようかなと考えています。年の途中からDAZNを契約しして、F1を予選から観るぐらいには熱中的に観戦しています。決勝ももちろん面白いですが、予選のぎりぎりまでタイムを削る戦いは手に汗握ります。来年の目標は、今年あまり時間が取れなかった、英語のListening & Speakingと体を絞ることです。

Video
  • Game of Thrones
  • マギ
  • 3月のライオン
  • Ghost In The Shell
  • 氷菓
  • ソードアート・オンライン
  • Biohazard
  • Fantastic Beast
  • ファッションが教えてくれること
  • New Game!!
  • LEON
  • The Fate of Furious
  • 君の名は。
  • 言の葉の庭
  • 秒速5センチメートル
  • Fate/zero
  • Fate/stay night
  • The man in the high castle
  • The Walking Dead S8
  • コウノドリ
Game of Thronesのep1を最初見た時にうわー怖い系かぁとそこで一旦止めていたんですが数ヶ月後に見進めてみたところハマりました。Season8がなかなかNetflixやhuluで放送されないのでAmazonビデオでお金を払って見ましたが、その価値があるぐらいには良い作品だと思います。
Game
ゼルダはまだ途中ですが、かなり楽しんでます。マップが広すぎて急いでやると飽きそうな気がするのでのんびり進めようかなと思っています。
Book
  • 悪童日記
  • ふたりの証拠
  • 第三の嘘
  • 即戦力がつく英文ライティング
  • フランス人は10着しか服を持たない3
  • 青白く輝く月を見たか?
  • ペガサスの解は虚栄か?
  • キラレ×キラレ
  • ムカシ×ムカシ
  • ダマシ×ダマシ
  • イナイ×イナイ
  • 大事なことに集中する
  • 私たちは生きているのか?
  • 企業参謀 戦略的思考とは何か
  • HIGH OUTPUT MANAGEMENT
  • Teradata Aster Certification Study Guide
  • 仕事ではじめる機械学習
  • SRE サイトリライアビリティエンジニアリング
  • プログラマのためのSQLグラフ原論
  • Javaパフォーマンス
  • 実例で見る! ストレスゼロの超速資料作成術
  • ふつうのLinuxプログラミング
  • Database Management Systems
  • ビッグデータ分析・活用のためのSQLレシピ
  • 統計学が最強の学問である
小説では「悪童日記」、技術書では「仕事ではじめる機械学習」が印象に残っています。技術書は本を買わずにWeb上のリファレンスマニュアルを読むことが増えて来たので少なめです。
Comic
  • BLUE GIANT SUPREME
  • ベイリーとさっちゃん
  • クズの本懐
  • 服を着るならこんなふうに
  • ゴールデンカムイ
  • COPPELION
  • 繋がる個体
  • 女子こう生
  • 海月姫
  • かくかくしかじか
  • 東京タラレバ娘
  • ファイヤパンチ
  • 約束のネバーランド
  • この世界の片隅に
  • Odds!
  • たくのみ。
  • AIの遺伝子
  • よつばと!
  • ダンジョン飯
  • 進撃の巨人
  • のぼる小寺さん
  • アルスラーン戦記
  • タヌキとキツネ
  • いっぽん!!~しあわせの日本酒
  • 逃げるは恥だが役に立つ
  • 結んで放して
  • 昭和元禄落語心中
  • 嘘解きレトリック
  • ダンジョン飯
僕の中で今年一番面白かった漫画がBLUE GIANTです。10巻のラストは衝撃的でしたが、SUPREMEへとシリーズを分けるだけの出来事ではあると納得しました。大の真っ直ぐさやストイックさを見習わねば。ですね。
Life
今年の冬にやたら乾燥を感じるようになって、これが加齢か…と絶望しながら今までは使ってなかった入浴剤や乳液を買いました。無印のバスソルトはひのきの香りがお気に入りです。
Gadget
AnkerのSoundCore miniは使っていないのと、TVの契約を解除したのでHDD 2GBは余分だったなぁと反省。その他のものは満足しています。MacBook Proは Fnキーが物理じゃないのはやっぱり辛い場面もありますが、まあ我慢できる範囲内でしょうか。
PC


久しぶりにPCを自作しました。途中までUbuntuで使っていたんですが、仕事の都合でどうしてもWindowsが必要な場面があり、今はWindows 10が入っています(結局VMでUbuntuも使ってはいますが)。

Dec 10, 2017

Machine Learning Book


同僚にオススメされた「仕事ではじめる機械学習」を読み終わりました。今までもいくつか機械学習系の本を読んで来ましたが、図やグラフが豊富で1番わかりやすかったです。

SVM

  • 線形カーネルとRBFカーネルの2つがある
  • RBFカーネルは線形分離不可能なデータも分類できる
  • 損失関数はヒンジ損失関数はを使う
  • マージン最大化により過学習を抑えることができる
  • 線形カーネルはテキストなどの疎データ、RBFカーネルは画像や音声信号などの密なデータによく使われる

ニューラルネットワーク

  • 非線形なデータを分離できる
  • 学習に時間でがかかる
  • パラメータの数が多いので過学習しやすい
  • 出力層の計算した値をsoftmax関数で正規化を行い確率としてみなせることが多い
  • 活性化関数にはReLUがよく使われる
  • 誤差逆伝播で学習する

k-NN

  • kは投票する個数のことを意味している
決定木、ランダムフォレスト、GBDT
  • ランダムフォレストは利用する特徴量の組み合わせをいくつか用意して性能が良かった学習器複数の予測結果を多数決で統合する
  • GBDTはサンプリングしたデータに対して直列的に浅い木を学習していく
  • 複数の学習結果を組み合わせる手法をアンサンブル学習という
次元削減のための手法は主成分分析やt-SNEが有名

異常検知にはOne Class SVMがある

分類の評価 正解率、適合率、再現率、F値

  • 正解率 正解した数/予測した全データ数
  • 適合率 実際に当たっている数/予測した数
  • 再現率 予測した正解/全データの正解
  • F値 適合率と再現率の調和平均

回帰の評価には平均二乗誤差を使用する

ヒンジ損失

  • 決定境界ギリギリで正解しているデータにもペナルティを与え、マージンを持たせている

配布されているデータのドメインが実際に使うものと異なる場合は、半教師あり学習や転移学習といった手法を用いることができる

A/Aテスト ランダム抽出により均質な2群が得られるはずだが、それを確認し、差がなければ片方に介入する

Eコマースにおける推薦システムの応用シーン

  • 概要推薦 今週の人気商品のような統計情報ベースのおすすめ。利用し始めやたまに利用するユーザーに効果的
  • 利用者評価 ユーザーが︎をつけた評価やコメントを利用して統計情報として見せたりする
  • 通知サービス
  • 関連アイテム評価
  • パーソナライゼーション

人生に何回もないようなイベントではデータが集まりづらいため、PVなど他の指標で代用するなどの仕組みが必要

強調フィルタリング

新規ユーザーや新アイテムに対する推薦データが不足するコールドスタート問題がある。内容ベースフィルタリングなら比較的推薦しやすい。しかし辞書のメンテナンスの必要がある。

テールに従って頻度が少なくなるロングテールな分布になることをジップの法則という。

Uplift Modeling

普通のA/Bテストと異なり母集団を実験群と統制群の2つにわけ、単に反応したかどうかを調べるのではなく、実験群と統制群においてどのような特徴量を持つ標本が反応したのか/しなかったのかを調べる。

  • 無関心 介入行為をしてもしなくてもコンバージョンしないセグメント
  • 説得可能 介入行為があってはじめてコンバージョンに転じるセグメント ←ここを最も発見したい
  • 天邪鬼 なにもしなければコンバージョンするが、介入行為を行うとコンバージョンしなくなるセグメント
  • 鉄板 介入行為をしてもしなくてもコンバージョンするセグメント 鉄板セグメントに対する広告出稿は反応率は良いが単価が低くなる可能性も高いため注意が必要

AUCC(Area Under the Uplift Curve)を使ってUplift Modelingの評価を行う

Dec 6, 2017

Dogical Thinking


本屋さんで「ニューヨークの魔法のかかり方」を探している時に「犬が伝えたかったこと」という本をたまたま見つけ、表紙の柴犬が可愛くてこの本も一緒に買って家に連れ込みました。
20人による犬に関するエピソードが載っていて、ただ可愛い部分や別れの悲しい部分を強調するのではなく、犬と暮らすというのはどういうことなのかが描かれています。エピソードの合間に正しいしつけの仕方や、犬にまつわる研究も紹介されているんですが、知らないことばかりで新鮮でした。ある研究によると、犬と過ごすと散歩などで必然的に健康的な生活になることから、全ての日本人が犬と暮らした場合、健康保険の国の負担額は4兆円少なくなるそうです。
特に印象に残っているのは、犬は記憶力は相当良いのに予測は苦手という部分です。「〇〇をしたら叱られた」ということは覚えられても、「じゃあ〇〇をやめよう」とはならないそうです。これを逆手にとって、無駄吠えをした時に、叱っても構わないですが、一度口を押さえて吠えなくさせた後に褒めてあげると、「吠えたら叱られた」と学習した後に「吠えなかったら褒められた」という結果を学習するとのことでした。感情だけで動いているように見えて、ある意味ロジカルな感じがして不思議です。
たまにネットでポメラニアンの動画とかを観ていると、この顔は何も考えてなさそう…!という感じがものすごいしますが、この本を読んだ後に思い返して、やっぱり何も考えてなさそう…!!という結論にいたりました。みなさまもぜひ、本屋で見かけたら手にとってみてください。中の挿絵がカラフルで可愛いので書籍版がオススメです🐶

Dec 2, 2017

Hive Study


Hadoopの象本を読み返してみています。2013年に出版された第3版ってことは、hpでデータ系の部署に配属された時に買ったんだっけな〜と朧げな記憶が蘇ります。今日はHiveの部分を重点的に。
Hiveは読み込み時点ではデータを確認せず、クエリの発行時に確認する。これを読み込み時のスキーマ適用と呼ぶ。
compact/bitmapインデックス
compact: 各ファイル内のオフセットではなく、HDFSのブロック番号を保存する。値が近傍の行にまとまっているような場合に効果的
bitmap: 特定の値が現れている行を、圧縮されたビット集合を使って保存数r。通常はカーディナリティの低い列に対して使用する
HiveQLはSQL92への準拠がゴールとして設定されたことはなく、ユーザーの要求を満たせるように機能追加してきた。
管理対象/外部テーブル
管理対象: load data inpathは移動を伴う、dropはメタデータとデータそのものを削除する
外部テーブル: テーブル作成時にlocationのパスをチェックしない、dropはメタデータのみを削除する  
バケット
同じ列でバケット化された2つのテーブルの結合処理は、map側結合として効率的に実装できる。

create table bucketed_users (id int, name string)
clustered by (id) into 4 buckets
;
create table bucketed_users (id int, name string)
clustered by (id) sorted by (id asc) into 4 buckets
;
select * from bucketed_users
tablesample(bucket 1 out of 4 on id)
;

複数テーブルへのinsert

from s1
insert overwrite table t1
 select c1, count(c1)
 group by c1
insert overwrite table t2
 select c2, count(c2)
 group by c2
;   

空テーブルの複製

create table t1_new like t1
;

ソート
sort by: reducer毎にソートされたファイルを生成する distribute by: 特定の行がどのreducerに行くのかを制御する

from records2
select year, temperature
distribute by year
sort by year asc, temperature desc
;

関数の確認

show functions
;
describe function length
;

map結合 1つのテーブルがメモリに収まるほど小さければ、小さい方のテーブルをmapperのメモリに読み込んで結合処理を行うことができる。

select /**+ MAPJOIN(things) */ sales.*, things.*
from sales
 join things on (sales.id = things.id)
;

ビュー
生成時点ではディスクにマテリアライズ化されず、ビューの参照時点で、ビューのselect文が実行される。
ユーザー定義関数
UDF: 1つの行を受け取り、1つの出力行を生成する
UDAF(User-Defined Aggregate Function): 複数行を受け取り、1つの出力行を生成する
UDTF(User-Defined Table-generating Function): 1つの行に対して処理を行ない、複数行を出力する
UDFを作成する際はorg.apache.hadoop.hive.ql.exec.UDFをextendsし、最低限evaluateメソッドを実装する必要がある Hiveへの登録するにはjarファイルとしてパッケージ化し、add jarおよびcreate temporary functionを実行する
add jar /path/to/hive-examples.jar
create temporary function strip as 'com.hadoopbook.hive.strip'

(UDAFの作成方法はUDFと異なる部分もあるが割愛)