Case05

大規模機械学習システムを守る

自動データバリデーション

機械学習エンジニア×SUUMO

Case05

大規模機械学習システムを守る

自動データバリデーション

機械学習エンジニア×SUUMO

01Outline
事例のアウトライン
『SUUMO』では50個以上のレコメンドAPI運用しており、事業にとって重要な機械学習システムとなっていました。
その為、安定稼働できるようにインフラ起因の課題を解決することで、大きな障害が起きないような体制を構築する必要がありました。
しかし、インフラ課題の解消に伴いデータ品質管理における課題が顕在化。様々なデータが混在し、システムに障害を及ぼす状態が年に数件程度発生していました。
そこで、Easy/Extensible/Maintainableという設計思想でデータバリデーションシステムSoteria(社内のシステム名称)を開発し、既存システムへ導入することで障害発生防止を可能にしました。
02Issue
直面していた課題
『SUUMO』のレコメンドシステムは事業において重要な存在となっており、常に安定稼働を事業から求められていました。そのため、継続的にシステムの安定稼働に向けた対応を実施した結果、インフラ起因の課題については一定解決することができました。しかし、インフラ課題の解消に伴い、データ品質を管理する上での課題が顕在化していました。
システムの中身は下記の図のようになっています。機械学習を用いたシステムなので推論や学習ごとにパイプラインがあり、システムの至る所でデータが使われている複雑な構成です。データ自体は日々連携される物件マスターデータやログデータ、それを用いたバッチが生成するデータなど、様々なものが存在しています。そのため、大きく以下3つが課題となっていました。
課題① そもそものデータの種類や量が多く、データ定義がないことも多い
課題② バリデーション要件は、レコメンドのモデル要件によって異なり、運用中に要件変更も発生するため、初期開発時点でバリデーション要件を完全に確定させることが不可能
課題③ APIやバッチは50本以上あり、システム個別で検知機能を開発していては導入負荷が膨大になる

このような困難な中で、データ品質を担保することへのチャレンジが本プロジェクトのテーマです。
03Solution
実現した解決策
課題解決とともに実際に事業で活用できるよう、データバリデーションシステムである「Soteria(社内のシステム名称)」を開発。 事業装着を前提とし、下記の設計思想で設計・開発に着手しました。 ・Easyは、導入コストを低く実用に耐えられるものとすること
・Extensibleは、既存のバリデーション要件だけでなく、これから発生しうる新規要件にも柔軟に対応できること
・Maintainableは、リリース後もシステムの理解や変更が容易であること
この設計思想で開発したSoteriaを導入することにより、加工が終わったデータに対し自動でバリデーションを実施し、異常を検知すれば、即座にそのデータの反映を自動で停止するといった環境を整えることができました。
ソリューション 図
ソリューション 図
04Technical Background
技術的な背景
技術的背景 図技術的背景 図
スキーマ自動生成機能を採用しデータ定義を行い、そこに、必要に応じて開発者が手修正を加えるだけで、バリデーションに利用するスキーマを作成することが可能になりました。
技術的背景 図技術的背景 図
計算実行エンジンにApache Sparkを採用し、非常に拡張性の高い制約記述インターフェースを提供することで、条件の柔軟な記述を可能にしました。例えば、型や文字列長、プライマリキーのバリデーションなどについては、一般的なデータベース機能と同様に記述が可能となっています。一方、TSVの読み込みにおいて問題となりがちな「クオートが閉じているかどうか」 の検知については、正規表現によるマッチングでは行えません。SQLの標準関数で表現することは難しいのですが、Spark UDFの機能を用いて条件の記述を可能にしています。
技術的背景 図技術的背景 図
バリデーション機能をレコメンドシステムとは分離させ、レコメンドAPIの一部ではなく単独で実行可能なバリデーションシステムとして実装しました。これにより、API開発者は適切なスキーマさえ作成すれば、既存のシステムに手を加えることなく、ライトに異常データを検知することが可能になりました。また、特定のシステムに依存していないため、他システムにも容易に展開もできます。
05Outcome
得られた成果
Soteriaの開発及び既存システムへの導入によってデータ異常障害の防止が可能になりました。
また、Soteriaを用いることでデータテストをより簡単に実施でき、テスト工数の削減・テスト品質の向上が期待できます。また、様々なシステムで利用するデータに対しても、データバリデーションを容易に実装できるようになりました。