機械学習 に関する投稿を表示しています

THE AI 2018 というイベントに参加したメモ

先日、株式会社レッジが主催する THE AI 2018 というイベントに、色々が色々あって参加させてもらった。色々が色々でちゃんと見てなかったのだけどチケット 4 万円なのか…

THE AI 2018 | Ledge.ai

Ledge.ai たまにディープラーニング系のこと調べて辿りついたりするのだけど、元々が BITA デジマラボ、ビットエーだったとのこと、それはしらんかった。

Ledge.ai(レッジ) | AI:人工知能特化型メディア

ビットエー、AI特化型メディア「BITAデジマラボ」を「Ledge.ai(レッジエーアイ)」として全面刷新し、AI関連事業を「株式会社レッジ」として子会社化|株式会社ビットエーのプレスリリース

 

会場の雰囲気はこんな感じだった。オープニングがブチアゲ EDM で非常によかった(そこじゃない)

 

要するにイベントレポって話なわけで、気になったところだけメモしてたので、それを~~~。

  • 「未来ではなく、今のAIの話」「ビジネスに使えるAIの話」をするような場所。
  • 人間のスゴイところは変化はいろいろあるが、当たり前が変化することに適応していくところ
  • アスリートの学習の話
    • 自動化
      • 物事を反復するのは考えなくても出来るようにするため
      • 細部への意識ではなく全体の意識に変わる = チャンク化
      • 一度自動化したものを忘れることは難しい(英単語を日本語で考えるとか)
      • 上手くなることはその環境下で最適化すること
      • とはいえ完璧に最適化すると変化に対応できない
    • 集中
      • 集中は発想の連鎖を止めて没頭している状態
      • 上位でざっくり考えて全体が動いている(歩く時混乱しないよね)
      • 逆に下まで考えていることが降りてくると混乱する
      • 発想の連鎖を止めるために外部のモノ、テクノロジーも使う
      • 体験すると再現性が生まれる、フェアでなくなってしまうので、ドーピングはチートアイテム
    • イメージ
      • VRはある意味それ
      • トップアスリートにはデータや傾向がないのでイメージが大事
      • 他人の動きを見て推測、抽象化することが上手い人が多い
      • ただし推測は実態と違う、腕を動かそうと思っても肩を動かさないといけなかったり
      • 予測ができる範囲のことでは学習はできない
      • 計画できないものを計画できるような設計が学習には大事
    • 内製
      • アスリートは記憶を都合よく変える人が多い印象、自分を信じてやっていく
      • ビジョンを作る、10秒切るぞ!とか。それがないと10秒は何の意味もない
      • ビジョンとのギャップを考えて改善していく
      • 考えると頭のなかで失敗もできる
      • 頭のなかでシミュレーション、経験を積んで、深く考えていく
    • 欲求
      • 短期と長期の欲求をコントロールする
      • 今日は遊びたい、来年オリンピック出たい。練習したら遊ぼう!など
    • 長くスポーツを見ていて、勉強して100年前と同じという印象
      • 強い者でもなく、賢い者でもなく、適応した者が生き残っていく
      • 人の能力は必要で、AIが出来てもそれに合わせて適応し動いていく
  • MSさんの話
    • Azure、Trusted Cloudを意識している
      • セキュリティ、個人情報、コンプライアンス
      • そして透明性。公的機関から要請されたらすぐ情報を出せる
      • データセンターの紹介動画
    • AzureのCognitiveService
      • Vision, Language, Speech, Search, Knowledge
      • 中でもSearchは画像検索もできたりして面白い
      • Bingのデータを使ったりもしている
      • ビジネスで使えるよう、カスタムできるものも提供している
      • 活用例
        • レタス農家、コンバインとAIで雑草の仕分け
        • 北大eラーニング、字幕と翻訳の自動化
        • JFKの文章公開、OCRやテキスト起こし、検索で文章検索
        • 鳥の計測
        • 他にもいろいろあるよ
    • AzureのDataLake
      • SQLライクに書けるものを使ったBigData処理
      • そこにCognitiveServiceの一部の機能を組み合わせられうr
    • これまでデータは手入力していた
      • いかにしてデータの価値を上げていくか、自動化するか
      • 文字よりも写真のほうが情報量が多い、AIでそれもわかるようにんっってきた
      • IoTもデータ集めの自動化
    • AIはソフトウェアのエンジン
      • 正しく使わないと、正しく成果が出ない
      • Azureはドメインに限らず使えるように工夫している
      • なのでそのまま特化したドメインに適用しようとするとうまくいかない
      • ビジネスに使えない可能性も高いので、カスタムできるようにしている
        • データ収集~モデル構築~学習~運用
      • ルールベースの世界にちょっとのAIを足すことで今までより便利な世界になる
    • AIスクールも無料で見れるので活用してほしい
  • リクルートさんの話
    • テクノロジーズ、R&Dでビジネスへの活用をする
    • リクルート内では人のパターンを模倣するものとしてAIを定義
      • データとアルゴリズムで人のパターンを再現する
    • 社内でデータは多数いろいろあって何か使えないかなあというところでA3RTが誕生
      • A3RTでAIの構築が簡単になるので、ビジネス検討や要件、に注力できる
    • 事例
      • カーセンサーでCNN、写真から車名を当てられる。SNSでバズる
      • ゼクシィ、やりたい式の写真からキーワードを上げてくれる
      • ArGon、社内全体的に利用している校閲サービス。ルールベースと機械学習
        • Word2Vecやレーベンシュタイン距離、Bidictional LSTMを活用して誤字脱字、表記ゆれ、矛盾の解決
        • ルールはWeb上のUIを使って簡単に設定できるようになっている
      • 口コミ、CNN、AttensionNetで審査の自動化
    • AIは完璧でないので育てていく。学習しよう
      • AIは補助的なものである
      • AIを使って何をしたいか明確化する
      • 精度100%は無理、人がデータ入れたりロジック考えるんで
      • やりっぱなしじゃなくて、AIでどうなった、進化させていこう
    • AIの難しいところはAIだけ考えればいいわけでないところ
      • 運用するならアーキテクチャやインタフェースも考える必要がある
      • 新しいロジックや仕組みを使えば出来るわけでもない
      • チームで戦う。Pythonできますでは戦えない
    • 施策を継続していくために、問題を解決したり実際に使っていく
      • KPI、精度の目標は事前にすりあわせておく。見切り発車はあぶない
    • 逆にR&Dとして、テクノロジーを元にチャレンジする場も作っている
      • DQNを何かに使えないか?→UXやサイト改善?
      • 資料を作るのも時間が掛かるので、適切に判断するためにも上司は内容を理解するよう追いつけるよう務める
  • CAさんの話
    • AI Lab、産学連携なども駆使して、AI技術自体を良くしていこうとしている
    • たとえば阪大の石黒先生と一緒に社会実験をしている
      • 接客コミュニケーション
        • 音声、処理に時間が掛かる
        • テキスト、一問一答の精度は良いがやりとりが難しい
        • 選択式、現段階では最適か?ストーリーの折込もできる
    • アドテクでもAIを活用する
      • ブランド既存の回避、CV率上昇。テロや悲惨なニュースを避けたり
      • 文書の意味をアノテーションして推定、適切なマッチングへ
    • ロボットインタラクション、人とロボットのつながりを研究している
      • 近距離でのコミュニケーションは昔から変わっていない、これをテクノロジーしていきたい
  • ドコモさんの話
    • イノベーションを起こしていく、新規事業を作っていく部署がある
    • ecコンシェル。AIをビジネス、デジタルマーケティングに使った
      • ドコモはコミュニケーションの会社、webのコミュニケーションを良くしたい
      • 個人に特化したものを一部AIを入れてやっていく
    • Produt, Market Fit
      • ものと市場の合わせていく、マーケットにウケるものじゃないとどんなにいい出来でも売れない、難しい
    • バナーや施策は何があたるかわからない
      • 多腕バンディットアルゴリズムで色々出して解決するようなものやっている
      • 実際にはPKSHAと一緒に。
      • webの改善に強化学習を取り入れたりしている
    • AIDMA、それぞれのフェーズでコミュニケーションのやり方が違う
      • 行動心理学などの考え方もAIに取り入れつつ、適切なアクションを導き出す
      • ダッシュボードを用意して可視化
      • そもそもAIDMAのフェーズもAIで判定できるのでは?
  • ソニーさんの話
    • ディープラーニングは破壊的テクノロジー
      • 機械学習でできなかった可能性を実現できる
      • 色々な作業が自動化されていく、応用範囲、普及が広がっていく
    • ソニーでは機械学習は昔から。2010年くらいからディープラーニングもやっている
      • 事業がたくさんあるので、横断的にできるよう適切に開発できるようなツールを内製している、今回で三世代目
      • 社内で1000人以上使っている
      • コアとなるライブラリとGUIでネットワーク構築できるツール
    • 社内の事例
      • 不動産の予測、間取りや駅徒歩などの情報から金額を予測
      • Experia Ear、頭の動きセンサ、動きの判定
      • aibo、画像認識、各種センサで行動を分岐
    • 認識の基本は入力と出力のペア
      • 意識して業務を見つめると、きっと自動化できるものがある
      • その上でNNの設計が必要で、最後は回して学習していく
      • ディープラーニングのポテンシャルがあるので、発想と取り組み次第で利益へ
      • 一方で利用する人自身の認識が不足、応用できる技術者が少ない
      • そこで内製ツールを公開して盛り上げていきたい
    • ニューラルネットワークライブラリ
      • Tensorflowやchainerのように使える。LeNetも6行で書ける、GPU利用も1行で設定完了
      • C++で書いているのでエッジデバイスでも使える
      • インタフェースとしてはC++とPythonものを提供している
      • コア部分はプラグイン方式を取っているので自社デバイス、特殊な環境も使える
    • ニューラルネットワーククライアント
      • GUIでネットワーク構築が出来る
      • Windows向けアプリケーション、クラウド版もCPU版は公開、GPUはもうちょっと
      • AutoEncoderやRNN、GAN、半教師なども組める
      • テンプレ機能で難しいネットワークも1ボタンで組める
      • 最後の仕上げにネットワークの構成やパラメータを変えて最適化していく機能がある
      • 出来上がったネットワークはライブラリで利用できる形式で出力できる
    • みんな使ってね

 

ソニーさんのやつは見ていて面白そうだった。ディープラーニング出来る人が組んで試すという時代は通り過ぎ、知見がない人(プログラミングも)もとりあえず使うことが出来る時代になったのかもしれない。
「GANで画像が作れるんでしょ、でもなあ…」→ニューラルネットワークコンソールを使ったら簡単にできるよ!!

Neural Network Console

 

リクルートさんの A3RT も一部公開されている。無料で出来上がったモデルが使えるので、ディープラーニングのパワーを感じるのにはいいかもしれない。校正 API とかめっちゃ良さそうじゃないっすか。

A3RT

 

プレス席があったので、そのうちメディア系のところからちゃんとした(?)イベントレポがでると思うので、他のセッションどうなんよとかはそういうのを見るとよさそう。

 

参加していた人は役職も企業も様々で、だれもが AI に関心な感じだった。役職の部分だとエンジニアやデータサイエンティストな人もいれば、セールスな人、マネージャーな人、などなど。企業側は大手や小さい会社、web、リアル、などなど。
この一日、チケット代も含め、企業間の取引の話も進んでいるだろうし、数千万円とかもっと大きなお金がゴゴゴってなってるんだろうなあ。なるほど~

とやかくとかではまったく無いんだけど、この手のちゃんとしすぎているイベントは俺が作るんだ!な人は、得られる情報があまりない可能性もあるので、参加しないほうが良さそう。少なくともぼくの感覚としては、テックテック!な人じゃなくて、単純に懇親会ネットワーキングマンでビジネスするぞ!な人が一番価値ありそうだなあっておもいました!

 

逆に作る人は仕事で使えるようにこのインタビューに出てる本を読むと幸せ度があがるとおもいます。ぼくはちょっとだけしか読めてないんですが、サービスへの機械学習システムをどういう形で組み込むか、とか、機械学習を使わずに分析していく、とかって話はめっちゃ良いです。

【AI people:vol.7】『仕事ではじめる機械学習』著者座談会:前編 きっかけは「没原稿の供養プロジェクト」だった | blog - 人工知能(AI)/機械学習に特化した勉強会コミュニティ【Team AI】

GPU で動く Tensorflow をセットアップする

この記事は公開されてから1年以上経過しており、情報が古い可能性があります。

こんにちは。ごみばこです。

ちょっと思い立って、TensorflowをGPUで動かしたくなったので、その構築メモを残しておきます。

カンタンなまとめ

  • AWS EC2 で g2.2xlarge を スポットインスタンスで使った
  • Tensorflow の学習データを 60GB の付属するストレージに置いた
  • crontab と aws-cli を使って定期的に AWS S3 に学習データ(の一部)を転送した
  • tensorflow と tensorflow_gpu を間違えるとかなしい
  • 2日くらいで試行錯誤した成果は得られなかった

 

マシンの調達

ローカルPCでも NVIDIA なグラフィックが搭載されているので実行はできたのですが、せっかくなので AWS を利用することにしました。インスタンスタイプとしては g2.2xlarge を利用しています。さらに、せっかくなので スポットインスタンス を利用したのですが、ちょっと高めの金額設定をして、2日ほど安定して稼働できました。高めとはいえ、普通に EC2 のオンデマンドインスタンスを立てるよりも圧倒的に安くできています。

オンデマンドインスタンス: $0.898 / 1時間
(参考:https://aws.amazon.com/jp/ec2/pricing/on-demand/

スポットインスタンス: およそ $0.09 - $0.15 / 1時間
(参考:https://aws.amazon.com/jp/ec2/spot/pricing/

入札前に過去の金額を見ていると、なぜか ap-northeash-1a のリージョンだけ天井価格?まで跳ねることがあるようだったので ap-northeast-1c を利用しました。

 

スポットインスタンスならではの注意点ですが、データ消失の可能性があったので、実際に学習を進めてみたとき、中間データを S3 にファイルとして保存するようにしていました。仕組みとしては crontab を利用して aws-cli を実行する程度のカンタンなものになっています。

Tensorflow 自体が中間データを保存・読み込みできるので、非常に便利でした!(※実際には TFLearn を利用)

 

また g2.2xlarge ならでは…?かわからないのですが 60GB ほどのストレージが付属しています。このストレージはそのまますぐに利用することが出来るのですが、マシンを再起動したりするとデータが消失するので Tensorflow の中間データや、出て来るログや、前処理した後などの一時ファイル置き場として利用していました。

 

環境構築

Linux + GPU 周辺に知識があるわけでもないので、参考になりそうで、よさそうな記事を探して、それどおりに進めたところ、実に上手く行きました。

(参考:http://qiita.com/yukoba/items/3692f1cb677b2383c983

// 下準備
$ sudo apt update
$ sudo apt upgrade -y

$ wget http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/7fa2af80.pub
$ cat 7fa2af80.pub | sudo apt-key add -

$ wget http://developer.download.nvidia.com/compute/cuda/repos/ubuntu1604/x86_64/cuda-repo-ubuntu1604_8.0.44-1_amd64.deb
$ sudo dpkg -i cuda-repo-ubuntu1604_8.0.44-1_amd64.deb
$ sudo apt update

$ sudo apt install -y linux-generic
$ sudo apt install -y cuda nvidia-367
$ sudo reboot

$ sudo apt remove -y linux-virtual
$ sudo apt-get -y autoremove

$ rm 7fa2af80.pub cuda-repo-ubuntu1604_8.0.44-1_amd64.deb

// bashrcに追加
$ vi ~/.bashrc

export PATH="/usr/local/cuda-8.0/bin:$PATH"
export LD_LIBRARY_PATH="/usr/local/cuda-8.0/lib64:$LD_LIBRARY_PATH"

// 確認
$ nvidia-smi

// CuDNN の追加
//
// NVIDIA Developer に登録するとダウンロードできる
// https://developer.nvidia.com/
//
// ローカル PC でダウンロードして scp などで転送するとよい

$ tar xzf cudnn-8.0-linux-x64-v5.1.tgz
$ sudo cp -a cuda/lib64/ /usr/local/lib/
$ sudo cp -a cuda/include/ /usr/local/include/
$ sudo ldconfig

$ rm -R -f cuda cudnn-8.0-linux-x64-v5.1.tgz

// grub編集
// 12行目
sudo vi /etc/default/grub

GRUB_CMDLINE_LINUX="systemd.unit=multi-user.target"

$ sudo update-grub
$ sudo reboot

// 後処理
$ sudo apt-get clean

CuDNN をインストールするとき NVIDIA Developer に登録しなくてはいけなかったところがちょっとつまりかけたところです。登録するときいくつか分野?を選べるのですが、適当なものを選んでもダメで「Accelerated Computing with NVIDIA ComputeWorks」で登録する必要がありました。ここまで行くと nvidia 系のコマンドが利用できるようになり GPU の動作具合を確認することができます。

 

Python + Tensorflow の準備

こちらも Python に詳しいわけではないので、良さそうな記事をいくつか見ながら統合した結果で進めました。

// pip で入れる python ライブラリに必要なライブラリ、ツールを入れる
$ sudo apt-get install -y libpng-dev libjpeg-dev libhdf5-serial-dev libatlas-base-dev libopenblas-dev build-essential autoconf libtool pkg-config

// python3 を入れる
$ sudo apt-get install -y python3-pip

// aws-cli を入れる
$ sudo apt-get install -y awscli

// pip を更新する
$ sudo pip3 install -U pip

// 公式サイトを要確認し Tensorflow を入れる
// https://www.tensorflow.org/get_started/os_setup#pip_installation
$ sudo pip3 install -U https://storage.googleapis.com/tensorflow/linux/gpu/tensorflow_gpu-0.12.1-cp35-cp35m-linux_x86_64.whl

// 各種ライブラリを入れていく
// tflearn Tensorflow のラッパ。カンタンに Tensorflow を扱うことができるようになる。
// pandas  カンタンに csv を扱える
// Image   画像処理を行う
// h5py    Tensorflow が高速に動くために必要らしい
// scipy   科学技術計算ライブラリ。Tensorflow が高速に動くために必要らしい
$ sudo pip3 install -U tflearn
$ sudo pip3 install -U pandas
$ sudo pip3 install -U Image
$ sudo pip3 install -U h5py
$ sudo pip3 install -U scipy

// もう一度入れ直すと numpy が早くなるらしい...?未検証
$ sudo pip3 install -U --force-reinstall numpy

// g2.2xlarge の場合 60GB がついてくるのが /mnt
// ここにテンポラリを用意していく
$ sudo mkdir /mnt/tmp/

// 学習データの記録
$ sudo mkdir /mnt/tmp/checkpoint/

// Tensorflow が動作していく様子を web 上で確認できるようにするため
$ sudo mkdir /mnt/tmp/tensorboard/

// 全許可!
$ sudo chmod 777 -R /mnt/tmp/


// Tensorflow の動作確認
// GPUに関する出力がもりもりでてくるとOK
$ python3
> import tflearn

途中 Tensorflow を入れるところで、うっかり違うバージョンの Python 、 CuDNN の URL を指定すると動作しません。さらに GPU を利用しないバージョンをこれまたうっかり選んでしまうと CPU で動作する Tensorflow が入ってしまい GPU が使えません。pip3 list などで確認をしても Tensorflow としか出てこないのでどちらが入っているか確認するのがわかりづらく…。。

実際に import tensorflow とかを実施し、GPU 初期化したよ!という結果を見るのが一番でしょうか。

 

肝心の成果は…?

ここまでで、環境構築が出来たので、あとは MNIST のチュートリアルなどをすすめると、ディープラーニングの凄さ、GPU の凄さを体験できます。

ぼくはディープラーニングって何者?を体験したかったので MNIST チュートリアルをして、以前思いついていたレシートの判別(https://gomiba.co.in/blog/archives/587)をやってみてました。ニューラルネットワークやアルゴリズムがよく分からず、それっぽくニューラルネットワークを組んでみたのですが、思ったように loss が下がらず。。これはデータや組み方が悪いんだなーと思い、ディープラーニングむずかしいね、という結論でインスタンスを終了しました。

費用は2日間で $2 くらいでしたが何の成果もあげられませんでした!(もうちょっとがんばろう)

レシートの文字判別した捗るんじゃないのって思った

この記事は公開されてから1年以上経過しており、情報が古い可能性があります。

MNISTで手書きの数字認識できるじゃないっすか

あれをこう広げていって、レシートの写真を撮ると自動で項目と値段を割り振ってくれるような何かとかあったらスゲー面白いと思うんですよ

 

え?

 

ああ、そうですね、クラウドソーシングでレシート入力しているソリューションとかありますよね、知ってる知ってる

そういうアプリあるよねわかるわかる。

 

でもそれだと時間差あるじゃないですか。

それになんだかこう、他人に見られるわけじゃないですか、なんかこう嫌な人いるんじゃないですかね、きっと。

いや、わかんないですけど

 

というわけで、話題の「人工知能」と掛け合わせるんですよ、バカウケ間違いなしツールになりそう(適当)

 

「人工知能を使ってあなたのレシートを解析し、いつどこで何を購入したのか、自動で家計簿をつけてくれます」

「人工知能がお買い物や節約、出費に関するアドバイスを提供してくれます」

やばそう。

 

とりあえずトイレに籠ってレシート眺めてどうしたらいけそうか考えてたけど、思った以上にレシートの文字列って大きさバラバラすぎて辛いなーって思った。ので誰か任せた。

【U-NEXT ☓ Oisix 】データ分析と機械学習 事例発表」に参加してきた

この記事は公開されてから1年以上経過しており、情報が古い可能性があります。

「【U-NEXT ☓ Oisix 】データ分析と機械学習 事例発表」に参加してきたので、そのレポートです。

会場

五反田にあるOisixのオフィスで行われました。ここは駅に近く、アクセス良好でした。
オフィス内は綺麗で、ところどころにOisixらしさ、農産物のイラストがありました。

懇親会で出していただいた、トマトとブドウはとてもおいしかったです。これはOisixで買えるやつなのだろうか…!

Oisix事例:顧客属性推定とレコメンド

自己紹介

喋っていた方は、がっつりエンジニアだったというわけではなく、個人的にシステムトレードに興味があり、そこからOisixへ入社してデータ分析を始めたそうです。
現在は、パーソナライズやレコメンドを進めているそうです。

パーソナライズプロジェクト

Oisixとしては、お客様1人1人によりそったサービスや商品を提供したいので、様々な状況を理解して提案していくようなシステムにしたいと話していました。

Oisixでは定期ボックスという週に1度の頻度で定期的に購入できるものがあり、この中にデフォルトで商品が入っている状態になっています。定められた期日までは商品が変更でき、欲しいもの不要なものを入れ替えられます。

この定期ボックスにデフォルトでいれる商品が、ほとんどの人が同じモノになっていたので、パーソナライズして1人1人違うものを提案していく、というのが具体的なもののようです。

レコメンドのやり方

レコメンドは「顧客のクラスタ分析」と「商品のバスケット分析」の二段階で行っているそうです。単にバスケット分析をしただけでは、似たような商品を提示するに止まってしまいます。顧客のクラスタ分析をしてからバスケット分析をすることで、より精度を上げるようにしていました。

クラスタ分析としてクラスタリングとクラス分類があります。クラスタリングは教師なし学習で、全体をなんとなく眺めてざっくり囲むようなアルゴリズムが主なものです。クラス分類は教師あり学習で、例えば子供がいるかいないかを予測するものになります。

今回はクラス分類を利用して、子供のありなし、料理のするしないを分類し、2x2の4パターンに分けたそうです。
社内にもともとある知見や仮説が、この特徴だったので選択したそうです。

バスケット分析は「リフト値」と呼ばれるものを計算して高い順に出すものです。リフト値は信頼度と呼ばれる値と、支持度と呼ばれる値から算出されます。具体的には「ポテトフライを買った人はクラッカーを買っている傾向がある」といったものになります。

レコメンドのための基盤

OisixではメインDBとしてオラクルが使われているそうです。ここには顧客や商品のデータ、受注に関するデータが入っています。また、MySQLも合わせて利用されており、こちらには購買履歴や売り場に反映するための商品データが入っています。

データ分析用としては、トレジャーデータを利用しており、データの集約や加工をこちらで行っているようでした。

具体的なレコメンドへの流れ

データ整備

何をするにもまずはデータを整備する必要があります。

Oisixではトレジャーデータに集めて、そのデータを基に分析をしていました。
ここでの失敗談として、DBデータが更新されていなかったり、意味のないものが登録されていたりなどしたこともあり、手戻りが発生したそうです。

きちんと分析できるための準備も大事ですね。

アンケートの収集

ユーザのクラスタ分析に向けて、ユーザーアンケートによって教師データを集めたそうです。例えば「食の好みは」「料理をしますか」などを聞くことで、

ただ、アンケートの内容を詰め切れていなかった部分もあり解答と実態に差が出てしまうこともあったようです。自社サービスの特徴も考えてアンケートを作ろう、ということを言っていました。

外れ値データの除外

分類することが難しいので、「ほぼ買われている」「まったく買われていない」というものを除外したそうです。
具体的には購買数量をk-meansにかけて分けていったと話していました。

分類モデル

Y=セグメントに属するか、X=過去6ヵ月の商品ごとの購買数、1200人のデータセットとして、ロジスティック回帰によって、モデルを作ったそうです。
しかし、学習するたびに異なる結果になってしまったそうです。原因としては、説明変数が多すぎたと話しています。一般的には説明変数の5倍にあたる
データセットを準備すると良いです。

今回はデータセットの準備も出来ないため、似たような商品をまとめたり、削ったりなどすることで、説明変数の数を減らしていき、モデルが動くようにしていました。

分類モデルの適応

出来たモデルを顧客全体にあてて前述の4種類に分類したそうです。具体的には二回に分けて実施して、子供のありなし→料理のするしない といったようです。
テクニカルな話ですが、標準化の手法がやや間違っており、平均→標準偏差の重み設定を再適用してしまった、と話していました。

バスケット分析

顧客の分類が出来たので、それぞれに対してバスケット分析をしていきます。
実例の紹介もあり、例えば「シャルドネ→ソービニョンブラン」といった具合に見せていただきました。

やはり問題もあり、似たようなカテゴリが出てしまったり、毎週1人1人に様々な商品を提案することが困難だということがわかったそうです。
機械学習が万能ではない、ということを認識する機会になったと話していました。

商品の提示

実験的にできた結果ですが、実際にそのレコメンド効果を試すために、サイトの様々なところに出してABテストをしていったそうです。
同じロジックで出しても売り上げが変わり、売り場ごとに特徴の違いというのがあったようです。

今後について

顧客属性と商品属性をかけ合わせたり、地域や季節といった要因を組み合わせたり、もっともっと試したいことや、応用した別機能を考えていきたいと話していました。

U-NEXT事例:レコメンドシステムのこれまでとこれから

自己紹介

研究開発として、二人で進めており、どちらもエンジニアではないが理系出身ということでやっていたそうです。

U-NEXTのレコメンドシステム

U-NEXTは動画、電子書籍の配信サービスです。
12万本の映像、20万冊の電子書籍と多くのものがあり、とても端から端までは見切れません。
そこで、キュレーションをする仕組みを作りましたが、それも多くなってきてしまったので、リニューアルに合わせてレコメンドシステムを乗せて、より満足度を上げようという試みのようです。

レコメンドの要件としては、1人1人に違うものを、一日一回の更新で、でもパフォーマンスは損なわず、そして準備期間も短く…、となかなか険しいものだったそうです。

レコメンドシステムとしてやったこと

まずはデータを放り込む場所、ロジックを用意し、Oisixと同じくトレジャーデータに入れていったそうです。
そして分析やシステム構築というフェーズに入るのですが、社外と提携して進めるという話もありつつも、社内で小さく初めてトライアンドエラーでぐるぐる回していこうとしていました。
その裏ではレコメンドの評価を正しくできるように、目標が達成しているか見えるように判断できる仕組み作りも行ったそうです。

結果としては、視聴時間が27.5%アップし、「気持ちの良いレコメンドをしてくれる」といった評価も得られているそうです。

レコメンドの実践における課題

作ったことのある人がいない、作り方がわからない

「推薦システムのアルゴリズム」を読み、社内で勉強して、試行錯誤していった。トレジャーデータを利用することで、小さく始めるということも叶ったと話しています。

レコメンドの方法

レコメンドの方法としては大きく、協調フィルタリングか内容ベースの分析があります。
U-NEXTではよりよいレコメンドを求めてどちらも試していったそうです。

協調フィルタリングとしては、
評点の予測がよくありますが、U-NEXTには評点データがあまりなく、主に暗黙的データと呼ばれるログ、
つまり「動画再生ログ」「購入ログ」「クリック・遷移ログ」といったものをうまく利用することで、協調フィルタリングを実現していました。

協調フィルタリングにはユーザベースとアイテムべースがありますが、
ユーザベースは登録時の属性を利用するなどしたものの、新規ユーザーや視聴数の少ないユーザにはうまく働かず、難しいとの見方でした。
一方アイテムベースでは、再生ログを基に分析をし、結果として視聴時間がアップして成功と話していました。

内容ベースは、内部的に持っているタグカテゴリの分類や、そのベクトル化、そしてクラスタリングといったものを組み合わせて進めたようです。
具体的には、ApacheSparkとkuromoji.js、t-SNE、Scala、自作の可視化ツールを利用して、実施→正しさの人力検証をしていたとのことです。
しかし、協調フィルタリングに比べると、あまり良い結果にはならなかったそうです。
ただコールドスタート問題の解決(分析をするまで時間がかかる)や、セレンディビティの演出(出くわした!というもの)といった部分に一定の効果が見られるとのことで、
今後も進めていきたいと話しています。

また、レコメンドはエンジニアだけのものではなく、マーケティングやプロモーション担当の人もいじりたいとのことで、
GUIアプリケーションを提供して、設定変更やレコメンド適用についてをやりやすくしているとのことです。

他社との連携

atilikaという会社と協力して進めており、機械学習に関する流れの加速や、atilikaの持っている知見や発想、技術を利用していくという話です。
最先端のアルゴリズムや技術の適用など、自社だけで追いつけない部分をお願いしたり、データ分析という部分についてコンサルティングしてもらっているそうです。

まとめ

参加表明が100人を超えていたり、質疑応答やその後の懇親会も活発な発言があったり、様々な業界の様々な人がこの分野に関心があるということを実感しました。

個人的にも、機械学習を少しやってみている段階で、これでいいのかどうか、どうやって進めていこうか、といった部分を悩んでいるところだったので、
こういった事例を聞けることで不安解消につながって、非常に良い会だったと思います。

すごいシステム、完璧そうなシステムといったもの用意しないと、運用できないのではと思っていた節もあったのですが、
実際に事例を聞いてみると、ぼくの学習している範囲でも実現できそうなことばかりで、このくらいでもいいのねーと思いました。

すごいシステムを目指すというのも大事だと思いますが、ひとまずは今の自分のレベルくらいで、いろいろと活用していきたいと思います。

最近のやったこと

この記事は公開されてから1年以上経過しており、情報が古い可能性があります。

機械学習してる気持ちになっている

雑にTensorflowからこの世界に入門したけど、わからなさすぎたので
Python+scikit-learnから出直そうとしている。

https://www.tensorflow.org/

http://scikit-learn.org/stable/

そしてこのあたりを読んだ。

[amazonjs asin="4873116988" locale="JP" title="実践 機械学習システム"]

[amazonjs asin="B01HGIPIAK" locale="JP" title="Python機械学習プログラミング 達人データサイエンティストによる理論と実践 impress top gearシリーズ"]

用語や仕組みがわかってきたので、一段と楽しくなってきた。

機械学習すげーーーーーー

 

AWSぽちぽちしてる

某所でLINEBOTやろうぜ!みたいな話になって、環境用意することになった。
Terraformを使いたかったので、いい感じに使ってAWSぽちぽちした。

TerraformでAPIGatewayとEC2をもりもり立てて、Itamaeでプロビジョニングした。

https://www.terraform.io/

http://itamae.kitchen/

これがめっちゃ楽しすぎて、LINEBOTの記憶がない…。

 

 

エンジニアってたのしいなー