~AIに手伝ってもらったロングライド予測ツール開発記 1~
前回、AIに手伝ってもらいながらロングライドの予測ツールを作り、それを使って西伊豆までテストライドしてきた話を書きました。
STRAVAで作ったルートをツールに読み込ませると、グロスの走行時間や1時間ごとの予想到達地点を出してくれる。さらに、補給の目安やコンビニの有無をステムシートにまとめ、スマホで見られるマップまで作る。
実際に使ってみると、220km、獲得標高4000mほどのルートで、予測グロス時間が13時間17分、実際の経過時間が13時間23分。誤差6分という、実戦投入初回にして上出来な結果になったのは前回お話しした通り。

ただ、前回はライドの話が中心だったので、肝心の「どうやってそんなものを作ったのか」については、かなり端折りました。
今回はその開発編です。
あらかじめ最初にお断りしておきますが、予測ツールの中でAIが走行判断をしているわけではありません。AIに相談しながら、設計やコード作成、修正を手伝ってもらい、自分用の予測ツールを作っていった、という話です。僕はプログラミングができるわけでもなく、AIを今回のような目的で使うのも初めてです。
そもそも、なぜそんなものを作ろうと思ったのか。
ロングライドの予定を立てる時に、「このルート、実際どれくらい時間がかかるんだろう」と考えることはよくあります。
STRAVAでルートを作ると、距離や獲得標高はわかります。ざっくりした予測時間のようなものも出ます。ただ、それはあくまで目安のようなものだと思っていました。自分がそのルートを走った時に、休憩や信号待ち、補給、後半の疲労まで含めて何時間かかるのかまでは、なかなかわかりません。
特に10時間を超えるようなロングライドになると、単純な距離と獲得標高だけでは読めないことが増えてきます。
同じ200kmでも、獲得標高が2000mなのか4000mなのかで全然違います。前半に大きな峠があるのか、後半に登りが固まっているのか、あるいは、アップダウンが連続するのか。市街地で信号によく捕まるのか、40km信号がない道なのか。そういう要素が重なって、走行時間はかなり変わります。
そういうことを前提に、もう少し自分用に予測できたら便利だな、と思っていました。
そもそも日没前に帰りたい
この予測ツールを作ろうと思った発想の根っこにあるのは、「何時に帰ってこられるか」というより、「日没前に帰るには何時に出発すればいいのか」でした。同じじゃないの?と思う向きもあるでしょうが、僕にとってはここはかなり重要なところです。
自宅近くは市街地なので、深夜や早朝でない限り交通量はそれなりにあります。ロングライドの終盤、疲労が溜まった状態で日暮れの時間帯に市街地を走るのは、できれば避けたい。
郊外や山間部を走る場合でも、街灯のない道を暗くなってから走るのは避けたいところです。特に知らない道や、路面状況が読みにくい道ではなおさら。

つまり、20時でも23時でも構わないから帰着時刻が予測できる、という目的というより、日没までに安全に戻ってくるために、どのくらい余裕を見て出発するべきかを知りたい、という目的ですね。
もちろん、せっかくルート全体の予測を作るなら、それだけに留まらず、ライド中に役立つ情報も一緒に盛り込みたい。
何時間後にどのあたりにいるのか、補給はどこでできそうか、コンビニのない区間はどこか。さらには、どのあたりで大きめの休憩を入れるべきか、このペースで走ると後半に崩れそうなのか。そういった情報をまとめて、走行前にも走行中にも確認できる形にしたい、という欲がだんだん出てきたわけです。
STRAVAだけでは少し足りない
STRAVAのルート作成は便利です。
距離もわかる。獲得標高もわかる。コースの全体像も見える。知らない道を繋いでロングライドの計画を立てるには、かなり頼りになります。

ただ、もう少し細かく刻んだ情報や、自分の走力に即した予測などはなかなか難しい。
例えば、休憩や信号待ちを含めたグロスの所要時間。1時間ごとの予想到達地点。補給すべきカロリーや、水を補充するタイミング。コンビニがしばらくない区間。走行予定日の天気や降雨リスク。長い登坂に入る前に、どのくらい補給をしておけば良いのか。
そういうものは、一般的な平均値だけではなかなか見えてきません。
同じ200kmでも、コースプロファイルや、走る人の特性によってかかる時間は様々です。
平坦は得意だけど登りで大きく落ちる人もいれば、速くはないけれど後半まで淡々と走れる人もいます。こまめに休憩した方が安定する人もいれば、止まりすぎると逆に身体が重くなる人もいる。当然年齢も大いに関係しますし、自転車歴・運動歴の長さも影響するのはいうまでもありません。STRAVAのデータはそういった点で全体的な傾向はざっくり出してくれるのですが、「自分に特化した予測」は出してくれないなぁと感じていました。
だったら、自分の過去の走行データを使って、自分用の予測ができないだろうか。
そう考えました。
まずAIに相談してみた
ここまで考えたところで、AIに相談し始めました。
プログラミングも、データ分析も、運動生理学も詳しくありません。なので、最初からかなり丸投げです。
10時間以上のロングライドルートを作った時に、休憩込みの予測時間や1時間ごとの到達地点を知りたい。自分の過去データはある。心拍、ケイデンス、スピードはあるけれど、パワーメーターはない。最終的にどういうシステムにするかはわからないけれど、相談しながら作りたい。
そんな感じで投げてみました。
すると、AIは妙に乗り気でした。
単なるルート完走予測ではなく、自分専用の疲労モデル、補給モデル、停止傾向、地形適応、天候耐性を積み上げれば、ロングライド用の個人適応ペース戦略エンジンのようなものが作れるかもしれない、と言うのです。
個人適応ペース戦略エンジン。
急に大げさです。
でも、言いたいことはわかります。
要するに、一般的なサイクリストの平均ではなく、自分の過去ログから作る予測です。5%の登りで自分はどれくらいの速度になるのか。150kmを過ぎるとどれくらい落ちるのか。気温が高い日に心拍はどう上がるのか。夜間や疲労時にペースはどれくらい落ちるのか。休憩はどのくらいの間隔で入れると安定するのか。
そういう情報が積み重なれば、「一般的にはこのくらい」ではなく、「自分ならこのくらい」という予測に近づいていくはずです。
もちろん、この時点ではまだ何もできていません。会話の中で、夢だけが膨らんでいる状態です。
ただ、最初の一歩としては十分でした。
パワーメーターはない
少し気になっていたのは、パワーメーターがないことでした。
僕が使っているのは、心拍センサー、ケイデンスセンサー、スピードセンサーくらいです。最初は、それだと大したことはできないのかな、と思っていました。
でも、AIに相談してみると、パワーメーターがなくてもロングライド予測にはかなり使える情報がある、という話になりました。

心拍がどう変化するか、勾配ごとに速度がどれくらい落ちるか、疲れてきた時にケイデンスがどう変わるか。長時間走った後の巡航速度の低下や停止頻度、休憩後にちゃんと回復しているかどうかも、過去ログから見えてくるかもしれません。
パワーがなくても、そういう変化を追えば「どれくらい崩れずに走れるか」はある程度見えてくるのではないか、というわけです。
これはかなり面白いと思いました。
自分がロングライドでどこまで安定して走れるのか。どこで落ちやすいのか。どういう条件で削られるのか。
日没前に帰るためには、それらがわかれば良いのです。レースに出るわけではないのです。
欲しいものを並べてみる
最初に欲しいと思っていたのは、休憩や信号待ちを含めたグロスの所要時間でした。そして1時間ごとの予想到達地点も欲しい。
さらに考えていくと、15分以上の大休憩をどこで入れるべきか、補給食をどれくらい持てばいいのか、走行予定日の天気や降雨リスクはどうか、といった情報も気になってきます。長い登坂がどこにあるかを見た上で、そこまでにどのくらい補給をしておくべきかまで提案してくれたら、かなり助かります。
書き出してみると、ずいぶん欲張りです。
でも、ロングライドの計画としては、どれも実際に知りたい情報です。
特に、10時間以上走るようなルートでは、途中の判断が後半に効いてきます。序盤に飛ばしすぎる。補給が遅れる。暑さを軽く見る。コンビニがあると思って進んだらしばらく何もない。そういう小さなことが、後半大きく崩れる原因となります。
だから、単なる「到着時刻予測」ではなく、もう少し広い意味でのロングライド用の計画ツールが欲しかったのだと思います。
ロングライドは脚力より崩れ方
もう一つ、大事な視点があります。
ロングライドは、脚力より崩れ方の方が難しい。
これもAIとの会話の中で出てきた言葉ですが、かなり本質的だと思いました。
もちろん脚力は大事です。速く走れるに越したことはありません。登りに強ければ選べるルートも広がります。
でも、ロングライドで本当に難しいのは、前半にどれだけ速く走れるかではなく、後半でどれだけ崩れないかです。
同じ5%の坂でも、30km地点で登るのと、180km地点で登るのではまるで違います。

前半なら淡々と登れる坂が、後半では急に脚に来る。気温が高ければ体力を削られます。補給が遅れれば力が出なくなります。長時間休憩を挟んだら身体が重くなることもあります。深夜になれば眠気も出ます。
そういうものが積み重なって、ある地点から急にペースが落ちる。
たぶん、ロングライドで怖いのはそこです。
予定より少し遅れるくらいならいい。でも、疲労や補給不足で後半に大きく崩れると、日没前に帰るための計画そのものが崩れます。
だから本当に予測したいのは、単に「この勾配ならこの速度」ではなく、「この距離まで走った後、この状態で、この登りに入ったらどうなるか」なのかもしれません。
いきなり難しくなってきました。
最初から全部は無理
ここまで考えると、欲しいものはどんどん膨らんでいきます。
疲労や補給、休憩の影響はもちろん、天気、風、気温、日没、コンビニの位置、市街地の走りにくさ、信号、長い登坂、後半失速。考え始めると、入れたい要素はいくらでも出てきます。
何やら大変なことになってきました。
ただ、最初から全部を作ろうとすると、たぶん破綻します。
なので、まずはかなりシンプルに考えることにしました。
最初に作るべきものは、ルートを読み込んで、自分の過去データをもとに完走予測時間と区間ごとの予測速度を出すことです。そこに1時間ごとの予想到着地点と、できれば補給の目安を添える。
まずはそれだけでいいはずです。
それだけでも、ロングライド前の不安はかなり減るはずです。
この時点で、なんとなく最初の形が見えてきました。
STRAVAで作ったルートを読み込み、過去の自分の走行データをもとに勾配や距離から速度を予測する。そこに休憩込みのグロス時間や1時間ごとの到達地点、補給やコンビニ情報を重ねていけば、少なくとも「日没前に帰るには何時に出ればよいか」は、かなり考えやすくなりそうです。
ステムシートに貼りたい
そして、出力の形として最初に思い浮かんだのがステムシートでした。
プロの選手がステムにコース情報や補給計画を貼っているのを見て、前から少し憧れがありました。
ロングライドで同じことをやるなら、1時間ごとの予想到達地点、補給タイミング、コンビニの有無、休憩の目安あたりが小さくまとまっていると便利そうです。
スマホを出して確認するより、ステムに貼ってある方が走りながら見やすい。少なくとも、最初の発想としてはかなり現実的です。
ここでようやく、最初の目標が決まりました。
STRAVAで作ったGPXルートを読み込み、自分の過去走行データをもとにグロスの走行時間を予測する。そこから1時間ごとの予想到達地点を出し、補給やコンビニ情報もできる範囲で載せて、最終的にはステムシートとして印刷できる形にする。

まずはここまで。
今思えば、この時点ではまだ平和でした。
「日没前に帰るために、何時に出発すべきか」
そこから始まった話が、いつの間にか「自分専用のロングライド予測ツール」になってきました。
さて、では実際にどう作るのか。
ここからが大変でした。
次回は、ChatGPTと一緒に過去の走行データを分析し、勾配別速度や補給プラン、ステムシートを作ろうとして、スクリプトや出力ファイルがどんどん増えていく試作編です。
この時点ではまだ、後にスマホで現在地つきのマップまで作ることになるとは思っていませんでした。

コメントを残す