Upgrade to Pro — share decks privately, control downloads, hide ads and more …

機械学習分野におけるテストの自動化 #ques4

機械学習分野におけるテストの自動化 #ques4

第4回 Ques (2014.4.22 開催) でお話する「機械学習分野におけるテストの自動化」の発表資料です。

KOMIYA Atsushi

April 22, 2014
Tweet

More Decks by KOMIYA Atsushi

Other Decks in Technology

Transcript

  1. 機械学習分野に
    おける
    テストの⾃自動化
    2014.4.22 Ques #4 in DeNA
    @komiya_atsushi

    View full-size slide

  2. ※この資料料は
    http://bit.ly/ques4_ML_test
    で公開しています
    2

    View full-size slide

  3. Self-introduction
    3

    View full-size slide

  4. ALBERT Inc.
    Analytical technology
    5

    View full-size slide

  5. Background:
    Java / Web / AWS
    Machine learning
    6

    View full-size slide

  6. Jobs:
    Curation service,
    Marketing automation
    and Recommender
    systems developer
    7

    View full-size slide

  7. 知識識はあんまり
    ありません  (>_<)
    9

    View full-size slide

  8. QA in ALBERT
    10

    View full-size slide

  9. QA 専任の
    エンジニアは
    いません
    11

    View full-size slide

  10. QA = 開発エンジニア
    のお仕事
    ※インフラ構築や運⽤用も
    開発エンジニアのお仕事です.
    つまりフルスタ(ry
    12

    View full-size slide

  11. Test automation
    in
    ALBERT
    13

    View full-size slide

  12. Test automation
    =
    Code-driven testing
    (xUnit / xSpec)
    +
    Continuous integration
    14

    View full-size slide

  13. Code-driven testing by
    JUnit / Spock
    ※レガシーなシステムを除く
    15

    View full-size slide

  14. Continuous integration by
    Jenkins  .
    ※最近開発しているシステム
    16

    View full-size slide

  15. Test-driven
    development
    ※少しずつ導⼊入中
    17

    View full-size slide

  16. Today’s topic
    18

    View full-size slide

  17. 機械学習
    ×
    テスト⾃自動化
    19

    View full-size slide

  18. Code-driven testing
    に関わる話題を
    中⼼心にお話しします
    20

    View full-size slide

  19. Machine Learning
    21

    View full-size slide

  20. “⼈人間が⾃自然に⾏行行っている
    学習能⼒力力と同様の機能を
    コンピュータで実現しよう
    とする技術・⼿手法”
    from Wikipedia (機械学習)
    23

    View full-size slide

  21. “第⼀一にそのデータが⽣生成した
    潜在的機構の特徴を捉え、複雑な
    関係を識識別(すなわち定量量化)
    する。そして第⼆二にその識識別した
    パターンを⽤用いて新たなデータに
    ついて予測を⾏行行う”
    from Wikipedia (機械学習)
    24

    View full-size slide

  22. “コンピューターでアルゴリズムを構築し、
    学習データを読み込ませることで、⾃自動的に
    今あるデータを分類&まだ⾒見見ぬデータを
    予測できるようにするもの”
    “ヒトの情報処理理能⼒力力を超えて、複雑なデータを
    分類&予測できるようにするもの”
    from 銀座で働くデータサイエンティスト
    のブログ
    http://tjo.hatenablog.com/entry/2013/04/30/191947
    25

    View full-size slide

  23. 2. 分類・推定フェーズ
    1. 学習フェーズ
    正解が未知のデータ
    (特徴量量のみ)
    特徴量量と正解情報の
    組み合わせから
    法則性を導き出す
    (モデル化)
    学習データ
    (特徴量量&正解情報)
    機械学習
    アルゴリズム
    分類・推定結果
    モデル
    モデルを元に
    正解を推測する
    Photo by littlelostrobot https://www.flickr.com/photos/littlelostrobot/215559356/
    26

    View full-size slide

  24. Recommendations
    28

    View full-size slide

  25. Email filtering
    29

    View full-size slide

  26. 機械学習の
    精度度は  100 % ではない
    ⼈人間と同じように、分類・
    推定に失敗することがある
    例例)メールのスパム誤判定
    31

    View full-size slide

  27. Software testing
    of
    Machine learning
    32

    View full-size slide

  28. 機械学習への
    Code-driven testing
    適⽤用の基本
    33

    View full-size slide

  29. ⼊入⼒力力データと
    出⼒力力結果を
    意識識する
    34

    View full-size slide

  30. 2. 分類・推定フェーズ
    1. 学習フェーズ
    正解が未知のデータ
    (特徴量量のみ)
    特徴量量と正解情報の
    組み合わせから
    法則性を導き出す
    (モデル化)
    学習データ
    (特徴量量&正解情報)
    機械学習
    アルゴリズム
    分類・推定結果
    モデル
    モデルを元に
    正解を推測する
    Photo by littlelostrobot https://www.flickr.com/photos/littlelostrobot/215559356/
    35

    View full-size slide

  31. 2. 分類・推定フェーズ
    1. 学習フェーズ
    正解が未知のデータ
    (特徴量量のみ)
    特徴量量と正解情報の
    組み合わせから
    法則性を導き出す
    (モデル化)
    学習データ
    (特徴量量&正解情報)
    機械学習
    アルゴリズム
    分類・推定結果
    モデル
    モデルを元に
    正解を推測する
    Photo by littlelostrobot https://www.flickr.com/photos/littlelostrobot/215559356/
    Input
    Output
    36

    View full-size slide

  32. 2. 分類・推定フェーズ
    1. 学習フェーズ
    正解が未知のデータ
    (特徴量量のみ)
    特徴量量と正解情報の
    組み合わせから
    法則性を導き出す
    (モデル化)
    学習データ
    (特徴量量&正解情報)
    機械学習
    アルゴリズム
    分類・推定結果
    モデル
    モデルを元に
    正解を推測する
    Photo by littlelostrobot https://www.flickr.com/photos/littlelostrobot/215559356/
    Input
    Output
    期待する結果
    であるか?
    37

    View full-size slide

  33. つまりは
    ブラックボックス
    テスト
    38

    View full-size slide

  34. 悩みどころ
    39

    View full-size slide

  35. 「期待する結果」
    の定義が難しい
    40

    View full-size slide

  36. 精度度は  100%
    ではない
    41

    View full-size slide

  37. ランダムな
    振る舞いをする
    アルゴリズム
    42

    View full-size slide

  38. テストデータを
    作るのが⾟辛い
    43

    View full-size slide

  39. どのような
    ⼊入⼒力力データを
    与えればよいか?
    44

    View full-size slide

  40. どのような
    出⼒力力結果が
    得られるのか?
    45

    View full-size slide

  41. テストケースが
    NG となったときに
    何がダメなのかが
    分かりづらい
    46

    View full-size slide

  42. 実装上の不不具合に
    よって  
    NGとなったのか?
    47

    View full-size slide

  43. はたまた
    ⼊入⼒力力データに
    不不⼿手際があったの
    か?
    48

    View full-size slide

  44. Patterns
    &
    Practices
    49

    View full-size slide

  45. テスト対象の
    分離離を意識識する
    50

    View full-size slide

  46. アプリケーション
    ビジネスロジック
    機械学習
    アルゴリズム
    51

    View full-size slide

  47. アプリケーション
    ビジネスロジック
    機械学習
    アルゴリズム
    特にビジネスロジックと
    機械学習アルゴリズムを
    切切り離離して考える
    52

    View full-size slide

  48. アプリケーション
    ビジネスロジック
    機械学習
    アルゴリズム
    実装の正しさを
    検証する
    使い⽅方の正しさ
    を検証する
    得られる精度度を
    検証する
    53

    View full-size slide

  49. どの粒粒度度のテストを
    実施すべきなのかを
    明らかにしておく
    54

    View full-size slide

  50. 機械学習アルゴリズム
    に対するテスト
    既存のライブラリを
    利利⽤用するならテストは不不要
    フルスクラッチ・独⾃自実装
    する場合は必要
    55

    View full-size slide

  51. ビジネスロジックに
    対するテスト
    機械学習に与える
    ⼊入⼒力力データや出⼒力力結果の
    取り扱いが複雑な場合に
    実施すべき
    56

    View full-size slide

  52. アプリケーションに
    対するテスト
    機械学習の結果の精度度を
    定量量評価できる仕組みが
    整っている場合に実現可能
    57

    View full-size slide

  53. 機械学習に対する
    理理解を深める
    58

    View full-size slide

  54. ケース
    テストデータを作成したい
    テスト結果が  NG となった
    場合に何が悪いのかを
    明らかにしたい
    59

    View full-size slide

  55. 擬似コードや
    数式を理理解
    するのがベスト
    60

    View full-size slide

  56. 数式が理理解できれば
    テストデータは
    ⼿手計算(Excel)で
    作れる
    62

    View full-size slide

  57. 数式に弱くとも
    ⼊入⼒力力データ
    タスク
    出⼒力力結果
    は把握できるように
    63

    View full-size slide

  58. 2. 分類・推定フェーズ
    1. 学習フェーズ
    正解が未知のデータ
    (特徴量量のみ)
    特徴量量と正解情報の
    組み合わせから
    法則性を導き出す
    (モデル化)
    学習データ
    (特徴量量&正解情報)
    機械学習
    アルゴリズム
    分類・推定結果
    モデル
    モデルを元に
    正解を推測する
    Photo by littlelostrobot https://www.flickr.com/photos/littlelostrobot/215559356/
    64

    View full-size slide

  59. 2. 分類・推定フェーズ
    1. 学習フェーズ
    正解が未知のデータ
    (特徴量量のみ)
    特徴量量と正解情報の
    組み合わせから
    法則性を導き出す
    (モデル化)
    学習データ
    (特徴量量&正解情報)
    機械学習
    アルゴリズム
    分類・推定結果
    モデル
    モデルを元に
    正解を推測する
    Photo by littlelostrobot https://www.flickr.com/photos/littlelostrobot/215559356/
    Input
    ⼊入⼒力力データ(説明変数、独⽴立立変数)は
    ・数値なのか?
    ・⽂文字列列なのか?
    ・質的変数なのか?  
    ・量量的変数なのか?
    65

    View full-size slide

  60. 2. 分類・推定フェーズ
    1. 学習フェーズ
    正解が未知のデータ
    (特徴量量のみ)
    特徴量量と正解情報の
    組み合わせから
    法則性を導き出す
    (モデル化)
    学習データ
    (特徴量量&正解情報)
    機械学習
    アルゴリズム
    分類・推定結果
    モデル
    モデルを元に
    正解を推測する
    Photo by littlelostrobot https://www.flickr.com/photos/littlelostrobot/215559356/
    タスクは
    ・分類なのか?
    ・数値の予測なのか?
    66

    View full-size slide

  61. 2. 分類・推定フェーズ
    1. 学習フェーズ
    正解が未知のデータ
    (特徴量量のみ)
    特徴量量と正解情報の
    組み合わせから
    法則性を導き出す
    (モデル化)
    学習データ
    (特徴量量&正解情報)
    機械学習
    アルゴリズム
    分類・推定結果
    モデル
    モデルを元に
    正解を推測する
    Photo by littlelostrobot https://www.flickr.com/photos/littlelostrobot/215559356/
    Output
    出⼒力力結果は
    ・連続値なのか?
    ・離離散値なのか?
    ・単⼀一なのか?
    ・複数なのか?
    67

    View full-size slide

  62. 別⾔言語の実装を
    利利⽤用して
    テストデータを
    作成する
    68

    View full-size slide

  63. アプリケーション
    ビジネスロジック
    機械学習
    アルゴリズム
    実装の正しさを
    検証する
    使い⽅方の正しさ
    を検証する
    得られる精度度を
    検証する
    テストデータの作成、
    もぅマヂ無理理…
    69

    View full-size slide

  64. ケース
    (やんごとなき理理由により)
    フルスクラッチ実装した
    機械学習アルゴリズムを
    テストしたい
    70

    View full-size slide

  65. 別⾔言語の
    実装が存在する
    ことが前提
    71

    View full-size slide

  66. かつ、
    その別⾔言語の
    実装が⼗十分に
    枯れていること
    72

    View full-size slide

  67. ライブラリ:
    libsvm, liblinear,
    SciPy, OpenCV
    73

    View full-size slide

  68. フレームワーク・
    ソフトウェア:
    Mahout, Jubatus, R
    74

    View full-size slide

  69. モックや
    フィクスチャを
    活⽤用する
    75

    View full-size slide

  70. アプリケーション
    ビジネスロジック
    機械学習
    アルゴリズム
    実装の正しさを
    検証する
    使い⽅方の正しさ
    を検証する
    得られる精度度を
    検証する
    76

    View full-size slide

  71. ケース
    ビジネスロジックを
    テストしたい
    ランダムに振る舞う
    機械学習アルゴリズムを
    テストしたい
    77

    View full-size slide

  72. アプリケーション
    ビジネスロジック
    機械学習
    アルゴリズム
    実装の正しさを
    検証する
    使い⽅方の正しさ
    を検証する
    得られる精度度を
    検証する
    機械学習アルゴリズムの振る舞いに
    あまり左右されたくない…
    78

    View full-size slide

  73. モックを利利⽤用する
    79

    View full-size slide

  74. モックライブラリ
    Mockito
    https://code.google.com/p/mockito/
    JMockit
    https://code.google.com/p/jmockit/
    80

    View full-size slide

  75. アプリケーション
    ビジネスロジック
    モック
    アルゴリズム モックに
    差し替える
    ダミーの
    結果を返す
    81

    View full-size slide

  76. フィクスチャで
    状態を固定する
    82

    View full-size slide

  77. アプリケーション
    ビジネスロジック
    機械学習
    アルゴリズム
    モデル
    モデルを固定する
    (setup / teardown)
    83

    View full-size slide

  78. アプリケーション
    ビジネスロジック
    機械学習
    アルゴリズム
    乱数発⽣生器
    乱数のシードを
    固定する
    84

    View full-size slide

  79. ※ご参考
    85
    http://bit.ly/random_junit

    View full-size slide

  80. ベースラインの
    精度度と⽐比較する
    86

    View full-size slide

  81. アプリケーション
    ビジネスロジック
    機械学習
    アルゴリズム
    実装の正しさを
    検証する
    使い⽅方の正しさ
    を検証する
    得られる精度度を
    検証する
    87

    View full-size slide

  82. ケース
    サービスレベルの
    精度度を検証したい
    88

    View full-size slide

  83. やりたいこと
    89

    View full-size slide

  84. 「期待される精度度」
    の設定に
    別のアルゴリズムの
    精度度を利利⽤用する
    90

    View full-size slide

  85. 例例)
    オンライン学習の
    アルゴリズムなら
    パーセプトロンの
    精度度をベースラインに
    SCW の精度度を検証する
    91

    View full-size slide

  86. 数値計算の
    特性を把握する
    92

    View full-size slide

  87. アプリケーション
    ビジネスロジック
    機械学習
    アルゴリズム
    実装の正しさを
    検証する
    使い⽅方の正しさ
    を検証する
    得られる精度度を
    検証する
    93

    View full-size slide

  88. ケース
    独⾃自の機械学習
    アルゴリズムを
    実装したので
    より緻密にテストしたい
    94

    View full-size slide

  89. ホワイトボックス
    テスト
    95

    View full-size slide

  90. 分岐だけではなく
    数値計算にも注意
    を払う
    96

    View full-size slide

  91. Conclusion
    99

    View full-size slide

  92. 業務システムの
    テストとは異異なる
    知識識を求められる
    のは事実
    100

    View full-size slide

  93. ただ  QA の知識識を
    ⼗十分に活⽤用する
    ことはできる!
    101

    View full-size slide

  94. •  テスト対象の分離離を意識識する
    •  機械学習に対する理理解を深める
    •  別⾔言語の実装を利利⽤用してテスト
    データを作成する
    •  モックやフィクスチャを活⽤用する
    •  ベースラインの精度度と⽐比較する
    •  数値計算の特性を理理解する
    102

    View full-size slide

  95. ありがとう
    ございました!
    103

    View full-size slide