データ分析ポエムです。書きたかったエントリがあったのですが、長くなってしまったのでパーツ毎に切り出します。自分のやりたい方向性やキャリア的なものを考えると、大体その中心には「データ」がいます。データに対してどう向き合い方はいくつかパターンがあると思います。データを生成するWebで言えば、アプリケーションエンジニアがここに該当するのかなと思いますユーザーの活動をログとして記録するデータを蓄積する生成されたデータを継続的に蓄積していきますSREやデータ基盤を整備する人がここに該当するかなと思いますデータを活用する貯蓄されたデータを使って意思決定に役立てたり、データからの未来の予測をしますデータサイエンスやR&D的なものはここに該当するかなと思いますこの3つに対して、これまで自分がどう向き合ってきたのか、これからどういう風になっていきたいのかをこのエントリでは整理してみます。全部やるデータとsyou6162の今後データと自分のこれまで上に挙げた3つの観点で、これまで自分がある程度やってこれたかなと思うのは「データを活用する」と「データを生成する」の2つです。データを活用する何だかんだでここが一番長いし、一番の得意分野もここかなと思います。blogデータを生成するはてなでのWebアプリケーションエンジニアとしての活動がここに当たります。全部やるどっちもありだと思います。自分のキャリアは基礎研究職から始まったわけなので、「データを活用する」を最初は目指していたことになります。活用のどれが欠けてもうまく回りません。推薦や異常検知)を発揮できないままですデータとsyou6162の今後データに関連する分野は非常に広大なので、一人で全部を同時期にやるというのは相当スペックの高い人でないと難しいと思います*1。チームで分担することで「自分はこの中のここを極める」といった選択も当然あると思います。一方で、人生のとある時期はこっちをやり別の時期ではあちらをやって、トータルでデータに関連するところを全部見れる、別の分野を知っているからこそ強みを出せるといった選択も考えられます。自分の嗜好としてはこちらだなと最近思います。活用の3つの中で「蓄積」に関するところが自分のこれまでの経験ではすっぽり抜けており、そういったこともありデータ基盤の構築をやり始めました。活用の楽しさもあると思います。今後しばらくはデータを蓄積する基盤構築を仕事として取り組みます。それに伴なって2月から変わるところがありますが、それはまた別のエントリで。最近色々インプットしまくることに時間を取ってる結果、アウトプットが死んでいました。記憶がまだあるうちにまとめて書いておきます。Tokyoで登壇しました首都大で非常勤講師を担当しましたデータ基盤構築活動をやってますMLCTで登壇しました前回も登壇させてもらっていたMLCTのパネリストとして登壇させてもらいました。お声がけいただいた@hurutoriyaさんに感謝。テーマは「アンチパターン」。SNS共有厳禁なので詳しくは書けないですが、大雑把にはこんな感じでした*1。Tokyoで登壇しましたMackerelのdrinkupで最近の機能リリース3本のうちの一つということで7月末に正式リリースをしたロール内異常検知についてお話しさせて頂きました。スライドの内容としては新しい内容は特にないですが、自分がメインで作った機能がこうして世の中に出て、ユーザーさんに使ってもらってフィールドバックをもらって、という場があるのはありがたいですね。これまでも機能開発自体には携わってきていたわけですが、プロトタイプから大体担当していたものだけあって思い入れが結構大きいのかなと思います。OSSやSaaSで異常検知エンジンはぼちぼち出てき始めている中で、以下のようなことを考えながら作っていました。Mackerelの特徴をどう生かして機能をデザインするかロール内異常検知単体で存在するわけではない。Mackerelというサービスの中でどういう問題を解決するものなのか、既存の機能とどう補完し合うものなのか機械学習で全ての問題を解決しようとしないアラートや障害対応する人との関わり方。syou6162首都大で非常勤講師を担当しました学生時代からお世話になっている首都大の小町さんからお声がけいただいて、非常勤講師として講義を担当させてもらいました。@smly)が豪華だったのでこれはヤバイな...と思いながら頑張って資料を作っていました。大学での講義(しかも実習)自体が初めてだったため、どれくらいうまくできたかは謎だったのですが、感想をパラパラ読ませてもらった限りではなかなか好評だったようでよかったです。いえ、学生さんの色んな手元環境を想定しきれていなくて本質的でないところに時間を割かせてしまったりした箇所もあったので、また機会があれば資料もブラッシュアップしていきたいなと思います。データ基盤構築活動をやってます今期(8月)からチーム内のデータ基盤構築をやり始めました。データ基盤、いつか関わってみたいと思ってはいたものの知識は特にない初心者でした。あれこれ勉強すべく、都内での出張タイミングで色んな勉強会に顔を出させてもらったり、社外の人や社内の経験のある人にひたすら知見を聞くということをやってました。技術的なことはもちろん、データ基盤をどうやって使ってもらうかが不安だったため、どういった工夫をされているか着手前に聞けたのはとても役に立ちました。ある程度運用が上手くいき始めたらこれもどこかで発表したいですね。異常検知と違ってデータ基盤は各社やっていると思うので、目新しさはあまりないかもしれませんが...。参加者の半分近くがエンジニア以外の職種の方。エンジニアのみでやっていても仕方ない領域なので、ありがたい...これも数回回してみたらどこかにアウトプットしたいやっていきます。Goタイトルだけ見ると何のこっちゃという感じですが、前提としてはこんな感じです。blog今回はこのツールのアップデートに関する話です。SAMへリリースした当初はAWS公式のcli経由でのdeployツールは(確か)存在しておらず、apexを使っていました。SAMに移行しました。Eventも一緒に管理できてよいですね。TweetをBigQueryに転送できるようにSlackでサービスに関する言及が流れてくるのはよいのですが、使っているうちに例えばこんな欲が出てきます。サービスへの言及数が最近多い気がする。先月と比べるとどうなんだろうこの機能要望多い気がするけど、定量的に見るとどうなんだろう今月よく言及されていたBlogのリストをピックアップしたいけど、Slackの履歴を一月分遡るのダルいな...定期的に手動で集計するのは手間なので、よしなに分析できるようにBigQueryに転送する機能を追加しました。Tweetの一覧が簡単に遡れます。meetup開催直後の期間に絞ったり、ユーザーを絞ったりすることも簡単です。Studioは画像のURLを書いておくと画像も表示できるので、アイコンも表示されて便利ですね。時系列で言及数の推移を見ることができます。11/6が特に多いですが、ダッシュボードで調べたところ、プレスリリースが出た日でした。株式会社はてなどういうブログに関しての言及数が多いんだろうというのもすぐ分かります。利用しているライブラリのアップデートは定期的にやっていきたいですね。dependabotが便利なので、導入しました。Modulesもちゃんと使うようにしました。このツールのアップデートは業務時間を使って行なわれましたsaba_disambiguatorのようなちょっとしたNLPツール、サーバー監視を支えるための機械学習を使ったロール内異常検知などを開発しています。ご応募お待ちしております。TypeScript趣味プロジェクトであるML-Newsのフロントを整備したのは約一年前。その頃はVue.jsのTypeScript対応も微妙な時期(?)だった。blogちょいちょいTypeScriptサポート対応したよという声も(個人的に)見るようになった気がして、自分もやってみることにした。mypyで生活しているので)。}で定義していた状態を普通のTypeScriptのフィールドにしていくComponentやPropをvue-property-decorator由来のものに置き換えていく小さいプロジェクトであるとはいえ、一度にやるとしんどいので、分割して進める管理画面だけ、とか検索画面だけ、とかTypeScript化で状況が多少よくなったので、eslintを導入して治安をよくした困ったこと導入するためにちょい困ったりはしたけど、得られた恩恵のほうが大きいかなという印象です。Studioをぼちぼち使っていこうとしてる。仕事のデータは分析する前のデータパイプラインなどあれこれ考える必要があるので、ひとまず趣味プロジェクトのML-Newsを題材にして遊んでみる。いうときに雑に遊べる砂場プロジェクトは最高。Sourceという概念がある。Sourceは名前の通りデータソースで分析をかける対象データを指す。consoleなどなど様々なものをデータソースとして指定できる。Uploadなどもある。Explore同じようにグラフが書けて似ているなって感じだけど、こういう使い分けかな。Studioで何ができるか知りたいので、Exploreを先に触った。Analyticsとする。Analyticsでできることとあまり変わらない。触った結果、威力を発揮しそうなのは複数のデータソースを統合する時かなと思った。SQLでいうjoinを相当ができると思うとよい。Sourceを統合して分析ML-NewsのURIはこういう感じになっていて、以下の数字の箇所がDB内のexample_idというものに対応している。https://www.machine-learning.news/example/21511953このexample_idに関連するtweet一覧やブコメ一覧をDBの中に持っている。ちなみにDBではtweetのスキーマを以下のように持っている。CASCADEよって、example_idを軸にjoinしてあげれば、PVと言及があるtweet数などの関係を解析することができる。Analiticsが持ってる)といったことが業務関連だとできそう。Dataというものにする必要がある。tweetの元データはAWS上のRDSに存在する。業務で真面目にやる場合は何らかのデータパイプラインを組んでBigQueryに定期的に流す、といったことが必要になる(この辺はあまり詳しくない...)と思う。今回はアドホックな分析がしたいだけなので雑にやる。雑にこういった感じのコマンドでcsvにする。Sourceの完成系はこういう感じになる。keysを元にどう繋ぐかを決定する。統合後に分析対象としたいものはDimensionsやMetricsに入れておく。Sourceに指定したもの。Analitics側はどの情報を元にexample_idとすればよいか当然知らないので、指定する必要がある。Analiticsのデータソースは、関数を使って自分が必要な列を持たせることができる。Pathというところにあるので、それを正規表現を使って抽出する。Analiticsで持っている各行のデータには今回の解析の対象外(個別のページではなくカテゴリ別のページ、など)としたいものも存在する。いったものはFilterを使って抽出する。今回はPathの情報とタイトルの情報を使ってフィルターを書いた。あとは分析しまくるここまでくれば後は簡単。やりたい分析をやるだけ。棒グラフや散布図を書いて自分が欲しい情報を抽出してくればよい。Viewsとretweetされた数の総数の関係を散布図で書いてみた。各点のページタイトルもしゅっと分かるので、深掘りなどもすぐできる。いっても深掘りするのもめちゃくちゃ簡単で、散布図中の深掘りしたい点をクリックしてやると他のテーブルや図もその条件に勝手に絞ってくれる。Studioを使ってみる前はデータソースをあれこれ指定してダッシュボードで可視化できる君くらいに思っていたが、join相当のことができると知って印象ががらっと変わった。keysのことを意識しつつ、何らかの形でデータソースに上げることができれば分析可能になるので、エンジニアとしては(ひとまず)データを上げるところまでを考えれば使ってもらえる形にできる。分析者視点としてはデータソースにまで上がっていれば、複数のデータソースを統合してより詳細な分析をExploreでアドホックにやったり、みんなで見るダッシュボードを整備するといったことができる。便利であることが分かったので、もっと使い込んでみようと思います。〜設計/運用/評価の観点から〜」というタイトルで登壇してきました。MLCTは機械学習をサービスで運用していく知見を共有する勉強会です。YouTube等で動画配信を積極的にしてくださっていて、はてなの京都オフィスでも鑑賞会と称してランチタイムに同僚と発表を見させてもらっていました。普段から勉強させてもあっていた勉強会に、登壇という形でちょっとはお返しできているとうれしいです。登壇させて頂き、ありがとうございました!私の発表資料はこちらです。スライド46枚ありますが、発表は15分だったので本番はこれの短縮バージョンで発表させてもらいました。さんのMackerelの異常検知の話。‪@chezou‬さんのこういうTweetもありましたが、開発者の僕自身結構胸熱(?)で、発表の見所としてはMackerelというプロダクトの概念にフィットするものを、運用が大変にならないようにいかにシンプルに作るか、というところです。具体的にはこういう感じ。LIME)のが主流になりつつあるしかし、運用観点では管理しないといけない機械学習モデルが増えて厳しい。大量のモデルを作るので、学習は低コスト、判定もリアルタイムの必要があるのでGANやAEは避ける。近傍法は学習コストは低いが予測時のmodelのloadに時間がかかる。2019年5月29日GMMの根拠を条件付き確率から計算してるのか。2019年5月29日Mackerelでは検知漏れよりも誤検知を減らそうとしている。id:daiksyさんと一緒に登壇(パネルディスカッション)してきました。アルゴリズムがどうこうというより、実際にユーザに使ってもらえるプロダクト・サービスにするのはどうすればよいか、それを運用していくために必要な苦労・工夫などざっくばらんに話しました。立ち見(座り見?)が出たり、パネル後も質問してくださる方がいらっしゃるなど、大変盛り上がってよかったです。(1)スターをつけました引用をストックしましたストック一覧を見る閉じる引用するにはまずログインしてくださいログイン閉じる引用をストックできませんでした。再度お試しください閉じる限定公開記事のため引用できません。