Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
YoujiSuzuki
Search
youjisuzuki000
August 28, 2020
3
5.4k
YoujiSuzuki
PyConjp2020トークセッション
数理最適化と機械学習(自然言語処理)による課題可決
youjisuzuki000
August 28, 2020
Tweet
Share
Featured
See All Featured
Building Applications with DynamoDB
mza
91
6.1k
Adopting Sorbet at Scale
ufuk
73
9.1k
Why You Should Never Use an ORM
jnunemaker
PRO
54
9.1k
Building an army of robots
kneath
302
44k
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
6
520
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
29
2k
Fantastic passwords and where to find them - at NoRuKo
philnash
50
2.9k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
127
18k
Let's Do A Bunch of Simple Stuff to Make Websites Faster
chriscoyier
507
140k
GraphQLの誤解/rethinking-graphql
sonatard
67
10k
It's Worth the Effort
3n
183
28k
A Modern Web Designer's Workflow
chriscoyier
693
190k
Transcript
数理最適化×機械学習 コラボレーションによる課題解決 株式会社リーディングエッジ社 ECC事業部 技術部 鈴木 庸氏
発表内容 1. 自己紹介 2. 機械学習と数理最適化 3. 身近な課題を解いてみよう
4. 採用面談のスケジューリング 5. 実装について 6. 計算結果 7. まとめ 2
1. 自己紹介 名前 鈴木 庸氏 (Youji Suzuki) 所属 リーディングエッジ社 出身
千葉県君津市 Python歴 6年 業務内容 物流の組合せ最適化、シミュレーション、データ分析 趣味 釣り、ドライブ、ギター 共著 Pythonエンジニア育成推進協会監修 Python3スキルアップ教科書 辻真吾さん(みんなのPython勉強会主宰) 小林秀幸さん(Leading Edge社) 細川 康博さん(Leading Edge社) 鈴木庸氏 (Leading Edge社) 3
2. 機械学習と数理最適化 機械学習 明示的な指示を用いることなく、その代わりにパターンと推論に依存して、特 定の課題を効率的に実行するためにコンピュータシステムが使用するアルゴリズ ムおよび統計モデル(Wikipediaより) →分類、回帰、クラスタリング、次元削減など 数理最適化
ある条件に関して)最もよい元を、利用可能な集合から選択すること (Wikipediaより) →線形計画法、整数計画法、進化的アルゴリズム、焼きなまし法など 近年ではデータから機械学習をおこなった結果をもとに、数理最適化で意思決定を おこなうことが増えている。Pythonなら両方が簡単にできてとても便利!! 4
3. 身近な課題を解いてみよう 3.1 解きたい課題を探す 身近な人の困っている課題をヒアリングする 3.2 解き方を考える ①データを用意できるか?、なければどうすればデータを収集するできるか?
②課題を機械学習と、数理最適化の課題に分解する ③機械学習の課題の解き方を考える ④数理最適化の課題の解き方を考える 5
4. 採用面談のスケジューリング 課題の発見 弊社でのエンジニア採用について営業部にヒアリングしたところ、求人応募者の面談スケジュー ルをつくるのが大変であるのこと。 課題の背景 ベテラン営業社員が求人応募者のスキルと経験をみて、面談を担当する営業社員をアサインして いる。
解決したいこと 面談を担当する営業社員にも得意、不得意な技術領域があることと、求人応募者とのスケジュー ルがマッチするかどうかを考慮し、自動で面談スケジュールを作る。 期待される効果 求人応募者のスキルと経験に合った営業社員を面接官としてアサインすることにより、弊社が求 めるスキルにマッチするエンジニアを採用しやすくする。また、各営業社員の業務負荷(面談回 数)の平準化し、特定の営業社員への負荷集中を防ぐ。 6
4. 採用面談のスケジューリング 解き方を考える ①求人応募者のスキルと、営業社員のスキルのマッチング度合いを数値化する →TF-IDFによるベクトル化 →コサイン類似度によるマッチング度の算出 ②求人応募者と営業社員のマッチング度合いの合計が最大となるように、求人応 募者に営業社員を割り当てる。ただし、各営業社員に割り当てる回数の差をでき るだけ小さくする
→組合せ最適化で、営業と応募者のマッチング合計を最大化する 7
4. 採用面談のスケジューリング ③求人応募者のスキルと、営業社員のスキルのマッチング度合いを数値化する 営業のスキルのデータ(抜粋) 応募者番号 レベル skill1 skill2 skill3 skill4
skill5 0 A AWS 運用 インフラ 構築 1 A 若手 AWS 運用 ヘルプデスク 2 A AWS 運用 インフラ 構築 3 A 若手 AWS 運用 ヘルプデスク 4 A Python Web開発 上流工程 30代 5 A Java ブランク コンサル PM 営業社員 レベル skill1 skill2 skill3 skill4 skill5 0 A AWS 運用 インフラ 構築 1 A 若手 AWS 運用 ヘルプデスク 2 A Python Web開発 上流工程 30代 3 A 外国籍 機械学習 Python C、C++ 2 B 50代 インフラ 運用保守 2 C 若手 BIツール テスター スクール 8 求人応募者スキルのデータ(抜粋)
4. 採用面談のスケジューリング ・CountVectorizerで単語の出現頻度を算出する(抜粋) java php pm pmo python インフラ テスター
ヘルプデ スク 上流工程 仕様書作 成 機械学習 画像解析 運用保守 音声認識 営業0 0 0 0 0 0 2 0 0 0 0 0 0 0 0 営業1 7 1 2 0 2 6 2 1 2 0 0 0 4 0 営業2 0 0 0 0 2 0 0 0 0 0 2 0 0 0 営業3 2 0 0 0 0 0 0 0 0 0 0 0 0 0 営業4 0 0 0 0 2 1 0 3 0 1 0 0 0 0 営業5 0 0 0 0 0 0 0 2 0 0 0 0 1 0 応募者0 0 0 0 0 0 1 0 0 0 0 0 0 0 0 応募者1 0 0 0 0 0 0 0 1 0 0 0 0 0 0 応募者2 0 0 0 0 0 1 0 0 0 0 0 0 0 0 応募者3 0 0 0 0 0 0 0 1 0 0 0 0 0 0 応募者4 0 0 0 0 1 0 0 0 1 0 0 0 0 0 応募者5 1 0 1 0 0 0 0 0 0 0 0 0 0 0 応募者6 0 0 0 0 1 0 0 0 0 0 1 0 0 0 応募者7 0 0 0 0 0 1 0 0 0 0 0 0 1 0 応募者8 0 0 0 0 0 0 1 0 0 0 0 0 0 0 応募者9 0 0 0 0 0 1 0 0 0 0 0 0 0 0 応募者10 0 0 0 0 1 0 0 0 0 0 0 0 0 0 9
4. 採用面談のスケジューリング ・TfidfTransformerでTF-IDFに変換する(抜粋) java php pm pmo python インフラ テスター
ヘルプデ スク 上流工程 仕様書作 成 機械学習 画像解析 運用保守 音声認識 営業0 0 0 0 0 0 0.345861 0 0 0 0 0 0 0 0 営業1 0.165046 0.040053 0.068272 0 0.060729 0.165543 0.086189 0.028437 0.071531 0 0 0 0.125914 0 営業2 0 0 0 0 0.323253 0 0 0 0 0 0.426391 0 0 0 営業3 0.214652 0 0 0 0 0 0 0 0 0 0 0 0 0 営業4 0 0 0 0 0.213894 0.097177 0 0.300472 0 0.151783 0 0 0 0 営業5 0 0 0 0 0 0 0 0.30439 0 0 0 0 0.168474 0 応募者0 0 0 0 0 0 0.43444 0 0 0 0 0 0 0 0 応募者1 0 0 0 0 0 0 0 0.492627 0 0 0 0 0 0 応募者2 0 0 0 0 0 0.43444 0 0 0 0 0 0 0 0 応募者3 0 0 0 0 0 0 0 0.492627 0 0 0 0 0 0 応募者4 0 0 0 0 0.465063 0 0 0 0.547787 0 0 0 0 0 応募者5 0.347466 0 0.503054 0 0 0 0 0 0 0 0 0 0 0 応募者6 0 0 0 0 0.376824 0 0 0 0 0 0.497055 0 0 0 応募者7 0 0 0 0 0 0.539647 0 0 0 0 0 0 0.615695 0 応募者8 0 0 0 0 0 0 0.630588 0 0 0 0 0 0 0 応募者9 0 0 0 0 0 0.394875 0 0 0 0 0 0 0 0 応募者10 0 0 0 0 0.422426 0 0 0 0 0 0 0 0 0 10
4. 採用面談のスケジューリング TF-IDFは文書中に含まれる単語の重要度を評価する手法 ・TF:Term Frequency(単語出現頻度) →文書においてその単語がどれだけ出現しているのかをあらわす指標 文書において出現する回数が多い単語は重要となる ・IDF: Inverse Document
Frequency (逆文書頻度) →その単語の重要度をあらわす指標 文書中でどれだけレアな単語なのか 多くの文章に出現する単語は重要ではない 少ない文書に出現する単語ほど重要となる ・TF-IDF → 上記のTFとIDFを掛け合わせた指標 11
4. 採用面談のスケジューリング ・TF-IDFから各応募者と各営業のコサイン類似度を計算する(抜粋) 12
4. 採用面談のスケジューリング コサイン類似度は、文書ベクトルどうしのなす角度の近さを表す指標 → 0に近い:似ていない 1に近い:似ている 13
4. 採用面談のスケジューリング ・組合せ最適化で、応募者に営業を割り当てる 14
4. 採用面談のスケジューリング ・組合せ最適化で、応募者に営業を割り当てる 15
5. 実装について 16
5. 実装について 17
5. 実装について 18
5. 実装について 19
5. 実装について 20
5. 実装について 21
6. 計算結果 営業0 営業1 営業2 営業3 営業4 営業5 面談割り当て結果 応募者0
0.79610698 0.10657836 0 0 0.04221739 0.33588984 営業0 応募者1 0.43276954 0.07594414 0 0.12553288 0.21277525 0.61789063 営業5 応募者2 0.79610698 0.10657836 0 0 0.04221739 0.33588984 営業0 応募者3 0.43276954 0.07594414 0 0.12553288 0.21277525 0.61789063 営業5 応募者4 0 0.1457589 0.15033284 0 0.09947428 0 営業2 応募者5 0 0.2332301 0 0.07458408 0 0 営業1 応募者6 0 0.17057316 0.85783488 0 0.28023835 0 営業2 応募者7 0.18664298 0.21742893 0 0 0.05244105 0.10372887 営業1 応募者8 0 0.15997455 0 0.27824371 0.1279206 0.08311388 営業3 応募者9 0.13657197 0.23824476 0 0.37024512 0.03837261 0 営業3 応募者10 0 0.06256442 0.13655022 0.10081003 0.5063471 0.0790195 営業4 営業0 営業1 営業2 営業3 営業4 営業5 面談担当比率 0.10 0.31 0.19 0.17 0.10 0.12 目標面談担当比率 0.20 0.30 0.20 0.10 0.10 0.10 ・応募者と営業のコサイン類似度と、面談割り当て結果 ・各営業の担当比率 22
7. まとめ 今回は採用面談のスケジューリングを、自然言語処理と数理最適化のコラボで 実現した。 自然言語処理 ・求人応募者のスキル要素をベクトル化 ・面接担当者のスキル要素をベクトル化 ・TF-IDFとコサイン類似度でマッチング度を算出
数理最適化 ・求人応募者と営業のマッチング度の総和を最大化し、各営業の担当比率を目標 担当比率との誤差を最小化 23
7. まとめ 機械学習と数理最適化を組み合わせて、高度な課題を解いていきたい。 今日の内容が、機械学習と数理最適化への興味を持っていだたけるきっかけと なればと思います。 ハンズオン主体の数理最適化Pythonコミュニティを作りたいと思います。 9月~10月中にCompassでアナウンスしますので、興味のある方はご参加くだ
さい。 本日はご静聴ありがとうございました。 24