🌊

🌎 宇宙から土地を評価する、ML Pipelineについて取り組み

に公開

衛星データから土地を評価する「WHERE」とは

https://prtimes.jp/main/html/rd/p/000000002.000146022.html

衛星データとAIで企業の不動産仕入れのスピードを加速させるサービスを株式会社Penetratorで開発しています。1回の不動産取引が数億となる不動産取引において、売りたい。貸したいなどの不動産流通の一次情報は非常に難しく、今現在でも人脈間での紹介などアナログ的手法に頼ってるのが現状です。
WHEREは、衛星データを利用して、衛星画像からAIで特定の不動産を検知して、法務局の登記データで所有者情報などを現地に行かなくて、空き地、駐車場などを瞬時に取得する事が可能です。
また、衛星データと不動産データを掛け合わせて衰退産業、ライバル企業要地などを自動的に見つけたりすることが可能です。

WHEREで用いられる、AIユースケース

利用ユーザーは、希望する土地の条件(ex. 立地条件、面積、用途地域 etc..)を入力して、探索リクエストを送信します。リクエストを元に、AIモデルが自動的に探索を開始して、衛星データから条件に適するデータを探索してくれます。

MLパイプラインとは 🔍


MLパイプラインとは、AIが実際に利用されるをまでの一連の作業を自動化する仕組みのことです。
実際に、AIモデルをサービスに載せるまでにデータを集めてきれいに整えて、AIモデルを作って評価し、最終的にそのモデルを実際に使える形にするまでの様々な工程を経て、利用できるようになります。
WHEREでは、

  1. 衛星データ取得
  2. 学習データセット作成
  3. Model 学習
  4. Model 評価
  5. Model デプロイ

の大きく5つの工程を経て、サービスからアクセスがされるようになります。

MLパイプラインを支えるTechStack

Model評価時など、データとモデルを効率的に実装する

Metaflow

https://metaflow.org/

MetaflowはNetflixが開発した、データサイエンスや機械学習のワークフローを簡単に構築・管理できるPythonライブラリです。Metaflowを採用した理由は、データ処理の流れが明快になりレビューしやすいのと、コードからインフラリソースをスケールアウトできる点で非常に便利なので入れました。

https://docs.metaflow.org/api/step-decorators/resources

WHEREでは、Modelを評価するときにIoU計算を行うJobをMetaflow+ECS(Task)を採用して自動化しています。

実際にECS上では、下記のような、stepに従って計算されています。

class IouAutomationFlow(FlowSpec):
    # ...環境変数の定義
    
    @step
    def start(self):
        print("✅ start MLflow")
        self.next(self.download_target_model_from_s3_bucket)

    @step
    def download_target_model_from_s3_bucket(self):
        print("✅ Download Model FromS3 Bucket")
        self.next(self.download_dataset_from_s3_bucket)

    @step
    def download_dataset_from_s3_bucket(self):
        print("✅ Download_Dataset_from_s3_bucket")
        self.next(self.create_dataset)

    @step
    def create_dataset(self):
        print("🥺 Create Dataset")
        self.next(self.calc_iou)

    @step
    def calc_iou(self):
        print("🧮 Calc IoU")
        self.next(self.send_slack_message)

    @step
    def send_slack_message(self):
        print("🔨send_slack_message")
        self.next(self.end)

    @step
    def end(self):
        print("end")

if __name__ == "__main__":
    IouAutomationFlow()

ちなみにMetaflowとArgoWorkflowは非常に相性が良く、使用してみたいTechStackです。

https://medium.com/@shriharishukla0105/metaflow-8c86ddec1c17

MLモデルを複数運用して、webアプリ側に影響を与えないような設計

サイドカーパターンの導入

https://www.oreilly.com/library/view/untitled/9784873118758/ch02.xhtml

以前まで、WHEREで使用されるMLのモジュールは、バックエンドアプリケーションと同じDockerImageで管理されており、バックエンドアプリケーションとMLモジュールが混在していた状態だった為、

  • DockerImageの肥大化とCI/CD実行時間の肥大化
  • MLのPackageのテストがしにくい

という課題があった為、サイドカーパターンを採用して、バックエンドアプリケーションとML Packageを切り離す方式で実装を行いました。

WHERE自体は、AWS・ECSを中心としたTechStackで稼働してるため、ECS・サイドカーパターンを導入することにしました。

https://aws.amazon.com/jp/builders-flash/202409/web-app-architecture-design-pattern/

ECSのサイドカーパターンは上記より、

  • 内部ALB接続パターン
  • App Mesh接続パターン
  • ECS Service Connectパターン

があるのですが、外部にAPIを排出したくないという条件かつ、迅速に実現できる方法として
ECS Service Connectパターンが選択されリリースされました。

最後に

株式会社 Penetrator はシリーズ A ラウンドにおいて総額 5.5 億円の資金調達を実施し、不動産テック業界における更なる成長を目指して、採用活動を一層強化しています。エンジニア、デザイナー、カスタマーサクセス、BizDev、営業、マーケティングなど、事業拡大を支える多様なポジションで共に挑戦していただける方を待っています!

▽ 会社のカルチャーを知りたい方はこちら

https://www.wantedly.com/companies/company_9924832

▽ 募集職種を知りたい方はこちら

https://hrmos.co/pages/where/jobs

Discussion