※前回の記事はこちら
Totonoi Scoreの開発経緯について
※続編はこちら
Rating フィードバックを入れたあと、実際のログでスコアがどう変わったのかを振り返った記事を書きました。
サウナの客観スコアに主観Ratingを足してみた。その後のログで見えたこと
TotonoiScoreの計算ロジックを見直した話
はじめに
これまで開発してきた「Totonoi Score」は、心拍データのみから算出する客観的な指標でした。
しかし、実際に運用を続けていると、数値と体感の間に**「納得感のズレ」**が生じることがあります。
- 「今日は最高にキマった!」と感じるのに、スコアは平凡
- 数値は高いが、体感としてはそこまででもない
数値は嘘をつきませんが、サウナの満足度にはコンディションや環境など、心拍数だけでは測れない主観の部分が存在します。
そこで今回、自分の**Rating(★評価)**をフィードバックし、スコアを自分好みに最適化する補正機能を実装しました。
補正ロジックの設計では、ChatGPTとの対話を通じてアルゴリズムの方向性を整理し、実装はCodexを併用して進めました。
AIに丸投げするのではなく、考えを言語化しながら一緒に磨いていく感覚です。
実装のコンセプト:客観を壊さず、主観を足す
アプローチは非常にシンプルです。「既存のアルゴリズムをリセットする」のではなく、「客観的なベーススコアに、主観的な補正値を加算する」形をとりました。
$$S_{final} = S_{raw} + \Delta S(Rating)$$
既存の計算式は「信頼できるベースライン」として残し、そこにユーザーごとの「好み」を薄く上乗せしていくイメージです。
補正のロジック
「どういう条件のときに、自分は高評価をつけやすいか」を以下の変数から傾向分析し、補正値を算出しています。
- ベースとなる生値
- セット数
- 心拍の変動幅($\Delta HR$)
- 各フェーズ(サウナ・水風呂・外気浴)の滞在時間
アルゴリズムの考え方
大げさなAIではなく、データが溜まるにつれて少しずつ傾向を調整していく、シンプルな仕組みです。
その日のRating(★評価)を基準値からの「乖離」として捉え、過去の傾向から「自分が満足度を感じやすい要素」を特定し、スコアに動的なスパイスを加える仕組みです。
段階的な反映(学習の重み付け)
いきなり極端な補正がかかって「数値の信頼性」が失われないよう、データの蓄積量に応じて反映度(信頼度)を変化させています。
- データが少ない時期:補正をほぼかけず、生値を優先。
- データが溜まってきた時期:徐々にRatingの傾向を反映。
- 十分なデータがある時期:自分の感覚に近い「自分専用スコア」として機能。
「いきなりAIに全任せ」するのではなく、実績に基づいてアルゴリズムの信頼度を育てる設計にしました。
UIでの「客観」と「主観」の切り替え
ユーザーがデータの出所を常に把握できるよう、表示を切り替えられるようにしました。
- RAW(客観モード):純粋な心拍データのみのスコア。
- RATING+(主観モード):自分の感覚を反映した「納得感重視」のスコア。
「データとしてどうだったか」と「自分がどう感じたか」を並べて比較できることが、振り返りの質を向上させます。
今後の展望
現在はまだ「お試し段階」であり、以下の改善を予定しています。
- セットごとのセグメント補正(2セット目が特に良かった、等の反映)
- 外気温や湿度データの相関分析
- データの信頼度(ノイズ除去)のさらなる向上
まとめ
「客観的な数字」に「主観的な納得感」を少しだけ足す。
それだけで、アプリを開いたときの
「そうそう、今日はこんな感じだった」という体験が、少しだけ近づきます。
まだ学習データが十分ではないため、下図のように大きな差は出ていません。
それでも、サウナを巡りながらデータを溜めていくことで、
このアルゴリズムがどこまで「自分仕様」に育っていくのか、ゆっくり観察していこうと思います。

それでは、良いサウナライフを!
