新卒2年目がデータ分析API開発に挑戦【Stapy#88】/data-science-api-begginer
by
松井宏典
×
Copy
Open
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Slide 1
Slide 1 text
新卒2年目がデータ分析APIの開発に挑戦した話 松井 宏典 株式会社スカラパートナーズ
Slide 2
Slide 2 text
目次 ● 自己紹介 ● 会社紹介 ● 分析データAPIの実装内容 • AWSの話 • クラスタリング • Pythonでの実装 ● まとめなど 2/24
Slide 3
Slide 3 text
自己紹介 松井宏典(まつい こうすけ) 名前 Python:pandas, scikit-learn, Django aws:Lambda, S3 スキル 株式会社スカラパートナーズ(2年目) 所属 画像認識、データ分析、その他R&D 主に機械学習に関する案件を担当。 頑張ってできることを増やしています。 業務など 3/99
Slide 4
Slide 4 text
会社紹介 - 株式会社スカラパートナーズ - 社会課題解決を軸にした共創型のビジネス ● 新規事業の立ち上げ ● ワーケーション事業 開発部の開発実績 ● コロナワクチン予約システム ● エールラボえひめ ● ナンバープレート検出モジュール ● データ分析 4/24
Slide 5
Slide 5 text
目次 ● 自己紹介 ● 会社紹介 ● 分析データAPIの実装内容 • AWSの話 • クラスタリング • Pythonでの実装 ● まとめなど 5/24
Slide 6
Slide 6 text
開発背景 BUSINESS-ALLIANCE株式会社と共同開発 アンケートデータの分析・可視化サービス 分析処理を担うAPIの開発を担当 2つのAPIを開発 ● クラスタリング ● テキストマイニング 6/24 引用:BUSSINESS-ALLIANCE「事業概要」 (https://business-alliance.co.jp/service/)
Slide 7
Slide 7 text
バックエンドのAWSの構成について ①csv保存 ②HTTPリクエスト csvの保存場所と 分析パラメータを渡す ③リクエスト 分析処理をリクエスト ④レスポンスを返す 成功時:分析結果の場所 失敗時:エラー文 分析が終わったら 結果をS3に保存 7/24
Slide 8
Slide 8 text
担当部分 ①csv保存 ②HTTPリクエスト csvの保存場所と 分析パラメータを渡す ③リクエスト 分析処理をリクエスト ④レスポンスを返す 成功時:分析結果の場所 失敗時:エラー文 分析が終わったら 結果をS3に保存 8/24
Slide 9
Slide 9 text
AWS SAMを使って構築(CloudFormationの拡張) メリット / 選んだ理由 ● 使用リソースをコード上で管理 ○ 同一設定のテスト環境と本番環境を作成できる ○ APIのコード(Lambda)をgitで管理できる ● Lambdaをローカルでテストやデバッグができる 開発環境 9/24
Slide 10
Slide 10 text
目次 ● 自己紹介 ● 会社紹介 ● 分析データAPIの実装内容 • AWSの話 • クラスタリング • Pythonでの実装 ● まとめなど 10/24
Slide 11
Slide 11 text
クラスタリングとは 11/24 本をよく買う 服をよく買う 本をよく買う 服をよく買う クラスタリング:データをグループ分けする分析手法(教師なし学習) 市場調査、マーケティングへの活用によく使われる
Slide 12
Slide 12 text
クラスタリングAPIについて アンケートのようなデータを分析する想定 クラスタリングのために、データ間の距離(類似度)を定義・計算する 12/24 ID お米が好き? 野菜が好き? 果物が好き? 肉が好き? 魚が好き? 0001 好き 嫌い 好き とても好き 好き 0002 好き 普通 普通 嫌い 好き 0003 とても好き とても好き 好き 普通 普通 : 0123 嫌い 嫌い とても好き 嫌い とても嫌い
Slide 13
Slide 13 text
数値に変換することで、データ間の距離を計算できるようになる 入力データについて 13/24 ID お米が好き? 野菜が好き? 果物が好き? 肉が好き? 魚が好き? 0001 4(好き) 2(嫌い) 4(好き) 5(とても好き) 4(好き) 0002 4(好き) 3(普通) 3(普通) 2(嫌い) 4(好き) 0003 5(とても好き) 5(とても好き) 4(好き) 3(普通) 3(普通) : 0123 2(嫌い) 2(嫌い) 4(とても好き) 2(嫌い) 1(とても嫌い) 距離:5
Slide 14
Slide 14 text
入力データについて 複数選択肢から1つを選ぶ、かつ回答が段階的でない設問はどうするのか こういった変数をカテゴリカル変数といい、ダミー化という処理をする Q.以下の料理ジャンルで最も好きなものを選んでください -> 和食 / 洋食 / 中華 / イタリアン …etc 14/24 ID 好きな料理 0001 和食 0002 洋食 0003 イタリアン : 和食 洋食 中華 イタリアン 1 0 0 0 0 1 0 0 0 0 0 1 : (1=はい、0=いいえ)
Slide 15
Slide 15 text
入力データについて 複数選択可能な設問も考えられます。 Q.自炊をする理由として該当するものを全て選んでください。(複数選択可) ->食費を抑えたいから / 料理が好きだから / 健康的な食材を使いたい …etc 15/24 ID 食費を抑えた い 料理が好き 健康的な食材 を使いたい 好きなものを 食べたい その他 0001 1 0 1 0 0 0002 1 1 0 0 0 0003 0 0 0 0 1 : (1=はい、0=いいえ)
Slide 16
Slide 16 text
目次 ● 自己紹介 ● 会社紹介 ● 分析データAPIの実装内容 • AWSの話 • クラスタリング • Pythonでの実装 ● まとめなど 16/24
Slide 17
Slide 17 text
● pandas ○ データ解析を容易にするライブラリ ○ DataFrame型は、二次元のテーブルデータを表す ○ 数表および時系列データの操作が簡単 ● scikit-learn ○ オープンソースの機械学習ライブラリ ○ 今回はクラスタリングで使用 ○ 他にも、分類、回帰などのアルゴリズムも使える ● boto3 ○ AWSをPythonから操作するためのライブラリ ○ 今回は、Lambda上からS3にアクセスするのに使用 主な使用ライブラリ 17/24
Slide 18
Slide 18 text
クラスタリングのコード例 18/24
Slide 19
Slide 19 text
● フロント側からパラメータを受け取る ○ クラスタリングする数など ● 解析結果を可視化できるような出力 ○ クロス集計 ○ レーダーチャート ● テキストマイニングのAPIを別で作成 ○ 自由回答のあるアンケートを想定 ○ 単語集計、共起ネットワークの生成 その他の実装内容 19/24
Slide 20
Slide 20 text
目次 ● 自己紹介 ● 会社紹介 ● 分析データAPIの実装内容 • AWSの話 • クラスタリング • Pythonでの実装 ● まとめなど 20/24
Slide 21
Slide 21 text
距離定義の話 ● 距離をどう定義するのが”一般的か”で悩んだ ● 結論、細かい調整はデータや調査の目的次第 ○ 質量混在データはgower距離 ○ 標準化(平均0, 分散1)して相対的に距離計算 苦労したこと 21/24 回答者 肉が好き? 野菜が好き? 好きな料理 A 4 3 中華 B 4 5 中華 C 4 3 イタリアン BさんとCさんのどちらが Aさんに近い(似ている)か? カテゴリ変数と数値変数の 距離をどう比べるのか?
Slide 22
Slide 22 text
苦労したこと subprocessをLambda上で使用した際のメモリエラー ● テキストマイニングAPIで、コマンド実行するためにsubprocessを使っていた ● 連続でAPIを叩くとメモリ不足のエラー ○ なぜか再現性がなく、とりあえずメモリ拡張したけど再発した ● subprocess.run(‘ls’)みたいなコマンドでも同様のバグ発生 ○ コマンドの内容ではなく、subprocessの挙動の問題 ● subprocessが子プロセスをコピーして生成する、みたいなのがエラーの原因? ○ 加えて、Lambdaのライフサイクルがブラックボックス ○ メモリ容量を監視することで、ちゃんとエラー発生を追えるようになった ● 結局メモリ解放する処理を加えたら直った ○ Lambdaでsubprocessは非推奨とのことだった 22/24
Slide 23
Slide 23 text
まとめ ● データ分析の知識がかなりついた ○ 適した手法、適していない手法などは知識が重要 ○ 基礎的な数学知識はあって良かった ● awsのサーバーレスアプリケーションの知識もついた ○ Lambda, SAMなど ● 保守性などに難ありかも ○ テスト設計をあまりせずに開発をしていた ○ 1人で書いていて可読性を犠牲にするときもしばしば.... 23/24