AI活用した業務改善ツールを作って気づいたこと

oyuchan

はじめに

庭に植えたほうれん草の成長を日々楽しみにしているoyuchanです。

AIを活用した業務改善の情報やサービスが増えていますね。
資料づくりや定型作業のように手順や成果物がある程度決まっている業務は導入しやすく、情報が多く複雑な判断が必要な業務ほど、AIの精度がネックになり導入のハードルは高く感じます。

今回は、多くの情報から判断が必要となり負担の大きかった「人員・工数の配置計画」という業務をAI活用で改善できないか試してみました。
その中で気づいたことや苦悩をご紹介したいと思います。

人員・工数の配置計画の業務について

私の所属するチームでは月に1回、月単位で複数の案件に対しどのメンバーを何時間配置するかの計画をExcelを使用し作成しています。 

毎月この計画の業務に多くの時間を費やしています。

何が複雑かというと、以下のような情報を元に複雑なパズルのように考えていきます。

  • 案件情報
    • 参画条件
    • 工数見積もり
    • 必要なスキル
    • 難易度
    • タスク内容
    • 業務委託可否
  • メンバー情報
    • 経験・スキル
    • 伸ばしていきたいスキル
    • 案件マネジメント可否


各案件には複数メンバーが配置され、メンバー1名に対し大体2~3案件配置するため、人数と案件が増えるたびに組み合わせ数は増えていきます。

工数計画ループの理想と現実

健全な計画を行うためには、以下のフローのように 実際の稼働実績から分析を行い、次の計画に改善点を活かすことが必要だと考えています。

ですが現状は、計画段階で調整の話し合いを複数回行うために各メンバーの時間が取られ、分析・計画の改善が充分に出来ていません。

人員・工数の配置計画の課題

他にも計画業務には課題があります。先ほど挙げたものも含め大きく3つの課題があります。

  • 計画調整コストの増加
    • チーム拡大中のため、現在進行形でメンバーと案件の組み合わせが増えている
    • 今のやり方では、組み合わせの増加に比例して調整の話し合いの時間は増加する
  • 計画の解像度が低い
    • 月単位の計画では、誰がいつ忙しくなるか(ボリュームゾーン)が可視化できず、月の途中で負担の偏りを調整している
    • 週単位で計画したいが、より計画作りに時間が取られる
  • 改善サイクルが回らない
    • 計画作りに時間を取られ分析・改善まで手が回らない
    • タスクが事前に不明瞭な案件もあるため、稼働実績を分析して精度を上げる必要がある

これらの課題を解決するために、週次計画に切り替える、フォーマットを変えるなどやり方を変えても、メンバー同士で調整する時間は減りません。

調整の時間を減らし、計画の精度を今よりも上げる方法はないかと考え、条件をもとに臨機応変に最適化できるAIの活用をしてみようと思いました。
そこで。まずはプロトタイプを作ってみることにしました。

プロトタイプを作ってみた

概要

以下のフローの中の「人員・工数配置計画」のみに焦点を当て 
最終的に人が判断することを前提に、最適な計画案を出力するプロトタイプを作成しました。 

目標

計画調整の負担減・精度の高い計画を出力できるよう、以下を目指しました。

  1. 過去に計画したものに近い計画を生成(制約を汲み取れている状態にする)
  2. 週単位の案件工数の情報をもとに、月単位だけでなく週単位の計画を生成
  3. 今まではできていなかった、祝日・有給休暇・定例ミーティング等を加味した上で、各メンバーの稼働時間を考慮した計画を生成

実装してみた

まずは生成AIを使って要件を壁打ちしながら整理しました。 

実装は、UIは大体のイメージを渡して細部のデザインはAIに任せたうえで、実装コードもAIに生成してもらう形でプロトタイプをサクッと作りました。

計画生成のために以下のインプット情報を用意しました。

  • メンバー情報
    • 経験・スキル
    • 案件マネジメント可否
    • 有給休暇予定
  • 会社の指定する休日
  • 祝日
  • 案件情報
    • 使用技術
    • 業務委託可否
    • 経験のあるメンバー
    • 参画条件
    • 月単位/週ごとの工数見積もり(レンジ幅)
    • 補足情報
  • 計画作成の制約

計画作成の制約には、「メンバーを配置する案件数は最大○個」「メンバーの稼働可能な工数内で配置する」など考慮すべき情報を入れました。

そして生成情報としては以下を出力するようにしました。

  • 全体的な工数計画
    • 稼働可能な合計時間
    • 稼働が必要な時間のレンジ幅(案件工数やの他の業務工数の合計の最小値と最大値)
    • 計画で配置した合計工数
    • 余力
    • 想定残業時間/人数
  • 各案件の工数計画
    • 配置メンバー × 月単位/週ごとの工数
    • 遅延・品質リスクに関するコメント
  • 各メンバーの工数計画
    • 月単位/週ごとの工数
  • 総括コメント

そして、いよいよ過去のデータを入力して生成してみました。
しかし初回の生成結果は散々なものでした。 

制約の内容を見直しながら何度も試しました。 

この制約は考慮されたと思ったら、別の制約は無視されてしまった、など思い通りにいかない結果の連続に心が折れかけました。

その後も試行錯誤を続け、結果としては過去の計画と近似した計画が出力ができるようになりました。 

ここからは、その過程で気づいたことを整理します。

実装して気づいたこと

AIに任せるために判断基準が言語化される

プロトタイプを回すうえで、いちばん大変だったのは制約情報の「言語化」でした。 同時に、とても価値のあるプロセスだと考えています。

AIに計画を生成させると、想像と違う結果が返ってくることがほとんどでした。 
思い通りにならない理由は、多くの場合、まだ言語化できていない判断の基準や制約条件にありました。 
生成と差分の確認を繰り返し、足りない制約を追加していきました。

計画を調整する際、メンバーによって指摘のポイントが違うことがあります。
それらを制約として言葉に残せると、特定の人の感覚や経験に頼りにくくなり、計画作成の精度も上がりやすくなり、今後改善する土台にもなると感じました。

今回のプロトタイプが結果として実務で使える形にならなかったとしても、言語化しチームで共有出来る状態にできたことは大きな収穫だと感じています。

処理速度問題とは長い戦いになる予感

制約を言語化して足していくほど、AIに渡す情報は増え、比例して生成時間が長くなりました。
遅い時は10分以上かかり、タイムアウトすることもありました。

対応策として、AIに全ての情報を渡して生成していたところから、「機械的に処理できるもの」と「AIに考えてもらうもの」に分けました

例えば、制約の中には、「稼働可能時間は月160時間以内」など単縦な制約があるため、それらを数字として確定できるものは先に処理し、AIにはその結果と「偏りを抑える」など複雑な制約を渡すようにしました。 

担当何をやる処理内容(例)
機械的な処理一定のルールで処理できること単純な制約、祝日・有給を除いた稼働枠、週次の工数集計など
AI判断が要ることどのメンバーにどの案件を何時間入れるか、制約同士がぶつかったときのトレードオフなど

AIに一番考えて欲しい配置の判断に集中できるため、生成時間は3分以内程度まで短くなり精度も上がりました。

ただ、制約情報は今後も追加していくので、今後も付き合っていかなければいけない課題だと感じています。

制約情報の重みづけの重要性

他にもAIの出力の精度を上げるために効果があったのが、制約情報の「重みづけ」でした。

制約情報をすべてを同じ優先度で渡すと、AIがどれを優先すべきか迷い
「この制約は考慮されたと思ったら、別の制約は無視されてしまった」ということが多々ありました。

そこで制約情報に3段階の優先度を付けたところ改善されたため、出力の精度を上げるために有効な手段だと思います。

細かいデバッグ情報を出力した方が改善しやすい

改めて言うまでもないかもしれませんが、デバック情報は細かく出力した方がインプット情報の改善がしやすいと感じました。

AIの処理は、中身がブラックボックスになりがちです。
「なぜこの出力結果になったか」を後から聞いても、再現性が低く、改善の手がかりになりません。

そのため、次のような情報を出力に含めるようにしました。

  • 各制約を満たしたかのチェックと、なぜ満たせなかったかのコメント(処理時間が伸びるリスクがあります)
  • 出力された数値の計算ロジック

これらの情報があると、結果が想像と違う場合に制約の書き方が悪いのかなどを原因を切り分けられ、試行錯誤が早く進むと感じました。

おわりに

今後は今回作成したプロトタイプを実業務で使い、検証する段階に移る予定です!
検証の結果や改善内容などをまた記事にしたいと思います。

AUTHOR
oyuchan
oyuchan
記事URLをコピーしました