Skip to content

Miu0721/hackathon20260413

Repository files navigation

🦏 さぼりアプリ (Sabori App)

SNS 使いすぎをサイのキャラクターが通知・応援する、スマホ習慣改善アプリです。


データ分析の概要

lib/services/analytics_service.dart にすべての分析ロジックが集約されています。
過去 30 日分の 1 日ごとの使用時間データをもとに、以下の 7 つの分析を実行します。

分析 内容
記述統計 平均・中央値・標準偏差・最大/最小
トレンド分析 線形回帰 + 7 日移動平均
曜日別パターン 曜日ごとの平均使用時間・休日効果
時間帯別パターン 朝/昼/夜/深夜の合計・ピーク時刻
異常値検出 Z スコア法(|z| > 2.0)で「使いすぎた日」を抽出
セッション分析 1 日の起動回数・1 回あたりの使用時間・使い方タイプ判定
スマホ習慣スコア 上記を統合した 0〜100 点のスコア(後述)

スマホ習慣スコアの計算方法

100 点スタートの減点・加点方式です(_computeHealthScore() で実装)。

軸 1 — 平均使用時間の超過(最大 −30 点)

$$ \text{overRatio} = \frac{\text{平均使用時間}}{\text{制限時間}} $$

$$ \text{減点} = \min!\bigl(30,\ (\text{overRatio} - 1) \times 30\bigr) \quad (\text{overRatio} > 1 \text{ のとき}) $$

状態 例(制限 60 分) 減点
制限内 平均 60 分 0
1.5 倍 平均 90 分 −15
2 倍以上 平均 120 分以上 −30(上限)

軸 2 — 使用時間の増減トレンド(最大 −20 点 / +10 点)

線形回帰の傾き slope(分/日)を利用します。

$$ \text{増加時の減点} = \min(20,\ |\text{slope}| \times 10) $$

$$ \text{減少時の加点} = \min(10,\ |\text{slope}| \times 5) $$

毎日 2 分ずつ増加していれば −20 点(上限)。逆に毎日 2 分ずつ減少していれば +10 点。

軸 3 — 日ごとのばらつき(最大 −15 点)

$$ \text{CV%} = \frac{\text{標準偏差}}{\text{平均}} \times 100 $$

$$ \text{減点} = \min!\bigl(15,\ (\text{CV%} - 50) \times 0.5\bigr) \quad (\text{CV%} > 50 \text{ のとき}) $$

日によって使い方が乱高下しているほどスコアが下がります。

軸 4 — 使い方タイプ(固定減点)

タイプ 判定条件 減点
binge(長時間集中型) 1 回の平均使用 > 30 分 かつ 起動回数が少ない −15
frequent(頻繁開閉型) 1 日の起動回数 > 10 回 −10
balance 上記以外 0

最終スコア

$$ \text{スコア} = \text{clamp}(0,\ 100) $$


「使用時間の変化」グラフの構造

グラフには 3 つのレイヤーがあります。

表示 何を描画しているか 算出方法
薄い点線(日ごとの記録) 実測値そのまま
太い金色の線(週間の流れ) 7 日移動平均 直近 7 日の単純平均を各日に計算
赤い点線(目標ライン) ユーザー設定の制限時間

「増えている / 減っている / 安定」の判定と「明日の予測: XX 分」は、
OLS(最小二乗法)線形回帰 の傾き slope と外挿値を使っています。

$$ y = a + b \cdot x, \quad \text{predictedTomorrow} = a + b \cdot n $$

傾きの絶対値が 0.3 分/日 未満なら「安定」、それ以上なら増加 or 減少と判定します。


主要ファイル構成

lib/
├── main.dart                   # アプリエントリ・BottomNavigation
├── constants/app_constants.dart # カラー・対象アプリ定義
├── models/app_usage.dart        # データモデル群
├── providers/app_providers.dart # Riverpod プロバイダー
├── services/
│   ├── analytics_service.dart  # 統計分析エンジン(コア)
│   ├── notification_service.dart
│   ├── sound_service.dart
│   └── usage_stats_service.dart
└── screens/
    ├── home_screen.dart
    ├── analysis_screen.dart    # 分析 UI
    ├── ranking_screen.dart
    └── settings_screen.dart

セットアップ

flutter pub get
flutter run

Android で実際の使用時間データを取得するには PACKAGE_USAGE_STATS 権限が必要です。
設定アプリ → 「使用状況へのアクセス」からアプリを許可してください。

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors