データエンジニアリングを中心にデータ処理基盤,機械学習関連のプロジェクトを経験. これからは機械学習の理論に軸を移していきたい. 今まで携わったプロジェクトに関する技術的な発表は,SlideShareにアップロードしてあります. https://www.slideshare.net/seiyamizuno35

  • CTR/CVR予測システムの開発

    横断組織としてWeb広告入札のための機械学習プラットフォームの開発を行なっています. CTR/CVR = DSPのリクエストから得られる入力に対してその広告が将来的にクリックされるか,コンバージョンするかを確率的に予測するタスクを実装しています. GCS上の所定の場所にアップロードされたデータに基づいて学習を行い、合わせて提供しているクライアントライブラリで学習結果をロードし,入力に対する予測が行えるというシンプルなものです. 具体的には、下記のパイプラインがKubernetesでホストされたAirflow上で動作する仕組みです. GCS (データの受け取り) => データの結合 + サンプリング (BigQuery) => 特徴選択(Lasso) => 学習(Logistic Regression, Factorization Machine) => 評価(AUC, LogLoss, Normalized Entropy) => 予測, および学習結果の可視化 実装ももちろん行いますが,私自身の主な役割はアーキテクトに近いです. データサイエンティストの意見を取り入れつつ,どういうものが必要かを見積もり,システムとしての設計を行うこと.そしてその利用方法をユーザに周知し,実際に接続してもらうための調整を行ってきました. アーキテクトとしてまず行ったのはクラウドの選定です. 選定の過程は記事としてまとめているのでそちらをご覧いただければ幸いです. https://qiita.com/Saint1991/items/8c19fd9cbaccf2284083 実装面では,GCS => BigQueryへのデータ読み込み,結合,サンプリングを行う処理の開発を担当しました. こちらはパイプラインとしてだけでなく,アドホックな分析で利用するデータの生成にも使えた方がよいという考えからGo言語のCobraというライブラリを使ってCLIとして開発しました. また,ユーザと接続の調整をしている際に,中でどんな学習が行われているのか把握したいという声が多かったため,学習時のメタデータやモデルパラメータを収集,可視化する機能を実装しました. Airflowは他のワークフローエンジンと異なり,XComという各タスクの実行結果を受け渡しできる機能が備わっています.これを利用し,各タスクのメタデータを受け取り,DBに投入.その後SuperSetを利用して可視化するという部分を実装しました. 現在可視化しているのは次のような項目です, 教師データ/テストデータにおける各クラスごとのデータ数 データのイベントタイムの期間 training/validation lossの変遷 AUC/Log Loss/Normalized Entropy Logistic Regression, Factorization Machineのモデルパラメータ 各フィールドごとのユニークな素性の数 BIツールはre:dashと比較検討しましたが,SuperSetはバックエンドに必要な最小コンポーネントがDB一つで済むのに対し,re:dashはRedis, PostgreSQLが必須だという点から,管理コストを考えSuperSetを採用しました. 他にもクラウド上のリソースをTerraformを使って全てコード化したり,KubernetesへのリソースのプロビジョニングをAnsibleで行ったりと,ややインフラに近いレイヤーも担当しています.

この先やってみたいこと

未来

機械学習 OSS活動

CyberAgent, Inc. AdTech Studio2年間

データエンジニア

-

共通基盤組織において,データ処理基盤,CTR/CVR予測システムの開発.

  • データ処理基盤

    # データ処理基盤の開発 Spark Streamingを用いてKafkaからデータを読み出し、 1) スキーマによるデータのバリデーション 2)重複レコードの排除 3) event timeによるパーティショニング 4) Parquet形式への変換 を行い、HDFSに保存するデータパイプラインの開発を行った.. 自身が担当したパートは、次の通りです. ## スキーマの互換性に基づくデータ管理 データのスキーマにはApache Avroのものを採用していました. Avroでは各フィールドにnullabilityやデフォルト値を設定できるため、有効なレコードを柔軟に規定することができます.この情報に基づきデータをバリデーションすることで、無効なレコードをフィルタリングし、有効なデータのみ正規の場所に保存されるようにしました. またAvroはスキーマとデータが完全に別になっているという点で、大量にデータを収集するというコンテキストではJSONやProtocol Buffersと比べても効率の良いフォーマットです.ただし、その恩恵を十分受けるには、スキーマ自体を転送する回数を減らす必要があります. (JSONのように全てのレコードにスキーマを載せると、サイズが無駄に大きくなるため) そこで、IDベースでスキーマを一限管理するためにスキーマレジストリを開発しました. これにより、各レコードにはスキーマのIDを含めるだけでよくなるので、全てのレコードにスキーマを載せる場合と比べてかなり効率が改善されました. さらにスキーマレジストリでは、スキーマの互換性を管理しており、後方互換性が保たれている範囲ごとにデータを固めて保存する仕組みをつくりました.これにより、Data Where Houseへ利用時に互換性のないデータ同士を読み出そうとしてロードエラーになるということを防止することができます. 詳細は下記のSlideの通りです. https://www.slideshare.net/seiyamizuno35/serialization-systems 上記のスキーマレジストリはOSSとしても公開しており、Docker imageとしてDockerHub上でも公開しております.また、Helmのchartを用意してあるので、Kubernetes上で簡単に動作させることができるようにしてあります. https://github.com/cyberagent/typebook ## S3 => Kafkaへのデータ転送 多様なデータソースからの取り込みを可能にするため、S3からKafkaにデータを転送するアプリケーションの開発をしていました.こちらは1日に約2TB程のGZIPデータを取り込まなければならず、処理性能が求められたため、Actorモデルによる並列実装がしやすいAkka Streamsを採用していました. アプリケーションの実行はDockerコンテナで行っていたのですが、単コンテナで上記のトラフィックを捌ききるのは厳しかったため、S3 Event Notification => SQS => Akka Streams => KafkaというようにSQSをロードバランサとして使うことにより高負荷に対してもスケール可能な状態にしました. 詳細は下記のSlideの通りです. https://www.slideshare.net/seiyamizuno35/connect-s3-with-kafka-using-akka-streams

大阪大学

情報科学研究科

  • JavaScript独自フレームワークのサンプルアプリの開発

    インターンシップに伺っている間に作成した,社内独自フレームワークを用いたJavaScriptのサンプルアプリです.このMVCの独自フレームワークとThree.jsを用いて日本地図上に数値情報を3D棒グラフで表示することができるアプリを作成しました. https://github.com/saint1991/hifive-samples/tree/master/gallery/rain-map

工学部 電子情報工学科

三重県立津高等学校

普通科


スキルと特徴

  • Scala

    0
  • Java (Android)

    0
  • Kotlin(少し)

    0
  • Terrafrom

    0
  • Ansible

    0
  • GCP、spark streaming、Kafka 他28件

実績

アプリをインストールして、知り合いの最新の活躍をフォローしよう