freeeの開発情報ポータルサイト

「自動で経理」の推論エンジンってどんなやつ?

AI ラボの nagomiso です。最近趣味という趣味が「飲酒」と「VTuber*1 の配信を見ること」だけになっていて危機感を覚えています。

唐突ですが freee 会計の「自動で経理*2」には登録された明細の内容から勘定科目などを推測する機能が備わっていることをご存知でしょうか?

例えば以下の画像のように「freee 独自の基準により推測」と表示されたら何らかの推測処理が裏側で走っています。

「freee 独自の基準により推測」という表示がされ, ガス料金の引き落としと思われる明細から「水道光熱費」という勘定科目が推測されている。
「自動で経理」で推測された勘定科目の例

皆さんご想像の通りこの推測の一部には機械学習を用いた推論エンジンが使用されています。推論エンジン自体は数年前から導入されているので話題としての新鮮味は薄いですが freee の機械学習に関する話題は割と門外不出状態だったので今回はこの推論エンジンについてざっくりとご紹介しようと思います。

推論エンジンの Ops 周り

「自動で経理」で使われている推論エンジンはマイクロサービスとして運用されており AWS の Elastic Kubernetes Service; EKS 上にデプロイされています。

freee 会計とのやり取りは以下の画像のように行っています。

freee 会計から推論エンジンへ明細のデータを送り, 推論エンジンが返す推論結果を freee 会計で利用する。
推論エンジンと freee 会計のやり取り
ユーザが freee 会計に取り込んだ銀行口座やクレジットカードなどの「明細データ」を推論エンジンへ送信し, 推論エンジンはその内容に基づいて推論してその結果を freee 会計へ返すという非常にシンプルな構成です。

マイクロサービスの中身は LightGBM で学習したモデルを Flask ベースの社内独自ライブラリで API サーバ化したものです。推論エンジンのコンテナイメージには 学習済みモデルが含まれており モデルの更新起因で問題が発生した場合でもコンテナイメージを戻すことですぐに切り戻しができるようになっています。また EKS クラスタへのデプロイは freee 社内で全社的に整備された仕組みを活用しており GitOps + Argo CD で簡単にデプロイできるようになっています

推論エンジンにまつわる処理の流れ

では推論エンジンはどのように推論を実現しているのでしょうか。

推論エンジンがどのような流れで処理を行っているのか

  • モデルの学習
  • エンジンの推論

の 2 つの観点で紹介しようと思います。

モデルの学習篇

まずはモデルの学習です。

モデルの学習は当然ながら freee 会計のデータを用いて行っています。もう少し具体的な話をすると freee 会計で実際に「取引登録された明細データ*3」を教師データとしています。具体的な処理は以下の画像の通りです。

取引登録済み明細を Athena (=プロダクトデータのスナップショット)経由で取得し, 前処理を行ったのちに LightGBM で学習を行う。
モデル学習時の処理の流れ

図に出てくる「アクションラベル」「勘定科目ラベル」「振替先ラベル」というのは以下のようなデータを指します。

  • アクションラベル
    • 明細データに対する処理を「勘定科目登録」とするか「振替登録」とするかのラベル
  • 勘定科目ラベル
    • 明細データに対して対応付けが行われた勘定科目のラベル
  • 振替先ラベル
    • 明細データに対して対応付けが行われた振替(資金移動)先金融機関のラベル

取引登録された明細データに対して前処理を行い特徴データやラベルデータ抽出して LightGBM で学習するというのがモデル学習の大まかな処理の流れです。

エンジンの推論篇

次に推論エンジンが行っている推論についてです。

推論エンジンは freee 会計に取り込まれた明細データに対して 3 種類の推測を行い, その結果を上手く統合して最終的な API のレスポンスとしています。具体的な処理の流れは以下の画像の通りです。

明細データを入力として 3 種類の推測を行いその推論結果を統合して最終的な推論結果を作る。
推論エンジンが行っている推論の流れ

なお 3 種類の推論は モデルの学習編 で記したラベルのバリエーションと対応しており

  • アクション推論
    • 「勘定科目登録」と「振替登録」のどちらで処理すれば良いか
  • 勘定科目推論
    • 勘定科目登録するならどの勘定科目を登録すれば良いか
  • 振替先推論
    • 振替登録するならどの金融機関の口座へ振替(資金移動)すれば良いか

といった内容を推論しています。

「自動で経理」の推論エンジンがどんなやつなのかなんとなく理解していただけたでしょうか?

推論エンジンの今後について

ここまでご紹介した内容はあくまでも 2022年2月時点 のものです。

AI ラボでは推論エンジンの推論精度向上や推測結果を受け取るユーザの体験向上に向けて継続的に試行錯誤を行っています。

例えば直近では

  • 学習アルゴリズムの置き換え
    • 例えば LightGBM ベースから Deep Neural Network ベースにするなど
  • 事業所毎の揺らぎを上手く吸収する仕組み
    • 実は各事業所で勘定科目や振替先の登録傾向には結構違いがあります
  • 推論結果の統合方法の改善
    • 推測結果の精度やユーザ体験に影響を与える部分なので結構工夫が必要です

などの検討をしています。

現状に満足せず「より賢く」「より使いやすい」推測体験を実現するために今後も努めていきますのでご期待ください。

ということで今回は今動いている推論エンジンのざっくりとした仕組みや今後に向けての取り組みについてご紹介しました。今まで門外不出(?)だった freee の機械学習活用について皆様に知っていただける機会になれば幸いです。

*1:ちなみに私は野うさぎです。アーモンドアーモンド 🐰

*2:「自動で経理」とは freee 会計に同期された銀行口座やクレジットカードの明細から帳簿付けを行う機能のことです。銀行などの明細から帳簿付けを行う(自動で経理) – freee ヘルプセンター もご参照ください。

*3:freee 会計における「取引登録」とは仕訳や口座振替といった経理上のお金の動きを freee 会計上に登録することを指します。また「取引登録された明細データ」とは「自動で経理」などで取引の内容が登録された明細データのことを意味します。要するにユーザが実際に記帳した(=ラベル付けした)データですね。「取引登録」に関する話題は 銀行などの明細から帳簿付けを行う(自動で経理) – freee ヘルプセンター手動で取引を登録する – freee ヘルプセンター なども併せてご参照ください。