{
 "generated": "2026-08-24T11:50:39-07:00",
 "video_base": "/v",
 "location": {
  "camera": "wc-taraval",
  "entrance": "Taraval",
  "park": "Sunset Dunes",
  "others": [
   "Noriega",
   "Judah"
  ]
 },
 "window": {
  "start": "2026-08-17",
  "end": "2026-08-23"
 },
 "attendance_assumptions": {
  "repeat_share": {
   "walking": 0.25,
   "running": 0.5,
   "biking": 0.5
  },
  "taraval_coverage_share": {
   "walking": 0.5666666666666667,
   "running": 0.7083333333333334,
   "biking": 0.765
  },
  "other_entrance_weight": 1.0,
  "entrance_weight": {
   "noriega": 1.0,
   "judah": 1.0
  },
  "full_length_share": {
   "walking": 0.5,
   "running": 0.75,
   "biking": 0.85
  },
  "taraval_capture_share": {
   "walking": 0.6666666666666666,
   "running": 0.8333333333333334,
   "biking": 0.9
  },
  "main_entrance_coverage": {
   "walking": 0.85,
   "running": 0.85,
   "biking": 0.85
  }
 },
 "explanation_markdown": "# How one camera becomes a park estimate\n\nWe have one camera near Taraval. It sees people passing one point on the\npromenade. It does not see every part of the park, and it does not know whether\nsomeone it sees at 9am is the same person coming back at 4pm.\n\nSo we start with what the camera can tell us, then make the assumptions visible.\nThe goal is a reasonable estimate of unique people who used the park that day.\n\nWalking, running, biking, passing through, and stopping in the park all count.\nWe try to leave out people who only cross the promenade on their way to or from\nthe beach.\n\n## 1. Count Taraval\n\nFirst we count people passing the camera. Within each ten-minute clip, the\ntracker follows a person across the frame so standing around does not turn into\nhundreds of counts.\n\nThis gives us **camera views at Taraval**. It is traffic, not unique humans yet.\nSomeone can leave, come back later, and create another view.\n\nWe also separate what we counted from what we estimated. Good video contributes\nits actual count. If a clip is missing, too dark, or too bright to use, we\nestimate that gap from historical traffic at the same time of day.\n\n## 2. Estimate repeat views\n\nMany people pass the camera more than once. A walker might go out and back. A\nrunner might do a loop. A cyclist might make several laps.\n\nWe estimate repeats separately for walkers, runners, and cyclists because they\ndo not move through the park the same way. If the camera records 100 runner\nviews and we estimate that 20 are later views of runners already counted, we\nstart the park estimate with 80 unique runners at Taraval.\n\n## 3. Account for visitors who don't pass Taraval\n\nTaraval is only one place in a long park. Noriega and Judah appear to be at\nleast as busy, and people also use thirteen smaller street approaches and the\ntwo far ends.\n\nBut adding traffic from those places would not tell us how many unique people\nvisited the park. The same person may pass one, two, or all three busy areas,\nwhile someone else may stay near a smaller entrance and never pass any of them.\nOne camera cannot identify that overlap.\n\nSo we make one direct assumption for each activity: **what share of all the\npark's walkers, runners, or cyclists pass the Taraval camera?** Dividing the\nunique Taraval count by that share accounts for everyone who does not pass it,\nregardless of where they entered or which parts of the park they used.\n\nOur current assumptions are 57% of walkers, 71% of runners, and 77% of cyclists.\nFor example, if 57% of the park's walkers pass Taraval, then for every 100 unique\nwalkers counted there, we estimate about 176 walkers park-wide.\n\nThese percentages are assumptions, not measurements. The activity-specific\nvalues reflect the belief that runners and cyclists generally cover more of the\npark than walkers.\n\n## The whole formula\n\nWe run the same calculation separately for each activity `m`.\n\n- `C_m`: camera views at Taraval.\n- `f_m`: the estimated share of those views that are repeats.\n- `t_m`: the estimated share of all park visitors who pass Taraval.\n\nThe estimate is:\n\n```math\nN = \\sum_m C_m(1 - f_m) \\times \\frac{1}{t_m}\n```\n\nIn plain language:\n\n```math\n\\text{activity estimate}\n= \\text{Taraval camera views}\n\\times \\text{repeat-view correction}\n\\times \\text{park-wide Taraval-coverage correction}\n```\n\nThen we add the three activities:\n\n```math\n\\text{whole-park attendance}\n= \\text{walkers} + \\text{runners} + \\text{cyclists}\n```\n\n## What comes from video, and what does not\n\nThe camera count is our starting data. Valid clips use actual tracked counts.\nMissing or unusable time is estimated before the attendance formula begins. The\nVideo tab shows how much of the selected day came directly from video and how\nmuch we filled in.\n\nEverything after that is an assumption: repeat views and the share of all park\nvisitors who pass Taraval. Those values remain visible in \u201cAdjust the estimate\u201d\nso you can change them instead of taking one hidden multiplier on faith.\n",
 "model": {
  "clip_seconds": 600.0,
  "day_start": 4.0,
  "day_end": 22.0,
  "shape": [
   {
    "t": 4.0,
    "rate": 0.0
   },
   {
    "t": 6.5,
    "rate": 84.5
   },
   {
    "t": 7.5,
    "rate": 167.5
   },
   {
    "t": 8.5,
    "rate": 283.0
   },
   {
    "t": 9.5,
    "rate": 354.0
   },
   {
    "t": 10.5,
    "rate": 498.7
   },
   {
    "t": 11.5,
    "rate": 573.1
   },
   {
    "t": 12.5,
    "rate": 546.2
   },
   {
    "t": 13.5,
    "rate": 538.4
   },
   {
    "t": 14.5,
    "rate": 567.3
   },
   {
    "t": 15.5,
    "rate": 631.7
   },
   {
    "t": 16.5,
    "rate": 594.7
   },
   {
    "t": 17.5,
    "rate": 475.5
   },
   {
    "t": 18.5,
    "rate": 432.6
   },
   {
    "t": 19.5,
    "rate": 243.1
   },
   {
    "t": 22.0,
    "rate": 0.0
   }
  ],
  "partial_day_shapes": {
   "weekday": {
    "source": "observed",
    "basis_days": [
     "2026-08-17",
     "2026-08-18",
     "2026-08-19",
     "2026-08-20"
    ],
    "fallback_scale": 0.595,
    "fitted_scale": 0.595,
    "direct_weight_hours": 3.0,
    "evidence_hours": {
     "6": 1.499,
     "7": 1.0,
     "8": 0.833,
     "9": 1.499,
     "10": 0.999,
     "11": 1.498,
     "12": 1.0,
     "13": 0.999,
     "14": 0.999,
     "15": 1.499,
     "16": 0.999,
     "17": 1.498,
     "18": 0.999,
     "19": 0.998
    },
    "shape": [
     {
      "t": 4.0,
      "rate": 0.0
     },
     {
      "t": 4.5,
      "rate": 10.0
     },
     {
      "t": 5.5,
      "rate": 30.1
     },
     {
      "t": 6.5,
      "rate": 71.8
     },
     {
      "t": 7.5,
      "rate": 118.8
     },
     {
      "t": 8.5,
      "rate": 188.3
     },
     {
      "t": 9.5,
      "rate": 233.4
     },
     {
      "t": 10.5,
      "rate": 280.6
     },
     {
      "t": 11.5,
      "rate": 297.4
     },
     {
      "t": 12.5,
      "rate": 311.0
     },
     {
      "t": 13.5,
      "rate": 308.0
     },
     {
      "t": 14.5,
      "rate": 318.1
     },
     {
      "t": 15.5,
      "rate": 363.1
     },
     {
      "t": 16.5,
      "rate": 332.3
     },
     {
      "t": 17.5,
      "rate": 334.3
     },
     {
      "t": 18.5,
      "rate": 319.0
     },
     {
      "t": 19.5,
      "rate": 183.5
     },
     {
      "t": 20.5,
      "rate": 86.8
     },
     {
      "t": 21.5,
      "rate": 28.9
     },
     {
      "t": 22.0,
      "rate": 0.0
     }
    ]
   },
   "friday": {
    "source": "observed",
    "basis_days": [
     "2026-08-21"
    ],
    "fallback_scale": 0.718,
    "fitted_scale": 0.718,
    "direct_weight_hours": 3.0,
    "evidence_hours": {
     "6": 0.333,
     "7": 0.998,
     "8": 0.999,
     "9": 0.998,
     "10": 0.998,
     "11": 0.999,
     "12": 1.0,
     "13": 0.998,
     "14": 0.998,
     "15": 0.999,
     "16": 0.997,
     "17": 0.333
    },
    "shape": [
     {
      "t": 4.0,
      "rate": 0.0
     },
     {
      "t": 4.5,
      "rate": 12.1
     },
     {
      "t": 5.5,
      "rate": 36.4
     },
     {
      "t": 6.5,
      "rate": 66.6
     },
     {
      "t": 7.5,
      "rate": 142.9
     },
     {
      "t": 8.5,
      "rate": 230.6
     },
     {
      "t": 9.5,
      "rate": 278.7
     },
     {
      "t": 10.5,
      "rate": 363.8
     },
     {
      "t": 11.5,
      "rate": 407.3
     },
     {
      "t": 12.5,
      "rate": 367.2
     },
     {
      "t": 13.5,
      "rate": 360.4
     },
     {
      "t": 14.5,
      "rate": 391.6
     },
     {
      "t": 15.5,
      "rate": 422.6
     },
     {
      "t": 16.5,
      "rate": 476.8
     },
     {
      "t": 17.5,
      "rate": 354.6
     },
     {
      "t": 18.5,
      "rate": 310.7
     },
     {
      "t": 19.5,
      "rate": 174.6
     },
     {
      "t": 20.5,
      "rate": 104.8
     },
     {
      "t": 21.5,
      "rate": 34.9
     },
     {
      "t": 22.0,
      "rate": 0.0
     }
    ]
   },
   "weekend": {
    "source": "observed",
    "basis_days": [
     "2026-08-16",
     "2026-08-22",
     "2026-08-23"
    ],
    "fallback_scale": 1.475,
    "fitted_scale": 1.475,
    "direct_weight_hours": 3.0,
    "evidence_hours": {
     "6": 0.666,
     "7": 0.999,
     "8": 0.998,
     "9": 1.166,
     "10": 0.999,
     "11": 1.166,
     "12": 0.999,
     "13": 1.998,
     "14": 1.998,
     "15": 2.166,
     "16": 1.997,
     "17": 1.165,
     "18": 0.998,
     "19": 0.832
    },
    "shape": [
     {
      "t": 4.0,
      "rate": 0.0
     },
     {
      "t": 4.5,
      "rate": 24.9
     },
     {
      "t": 5.5,
      "rate": 74.7
     },
     {
      "t": 6.5,
      "rate": 107.9
     },
     {
      "t": 7.5,
      "rate": 217.0
     },
     {
      "t": 8.5,
      "rate": 383.8
     },
     {
      "t": 9.5,
      "rate": 514.6
     },
     {
      "t": 10.5,
      "rate": 781.3
     },
     {
      "t": 11.5,
      "rate": 957.2
     },
     {
      "t": 12.5,
      "rate": 883.3
     },
     {
      "t": 13.5,
      "rate": 785.6
     },
     {
      "t": 14.5,
      "rate": 822.3
     },
     {
      "t": 15.5,
      "rate": 946.0
     },
     {
      "t": 16.5,
      "rate": 796.8
     },
     {
      "t": 17.5,
      "rate": 660.3
     },
     {
      "t": 18.5,
      "rate": 566.3
     },
     {
      "t": 19.5,
      "rate": 320.4
     },
     {
      "t": 20.5,
      "rate": 215.1
     },
     {
      "t": 21.5,
      "rate": 71.7
     },
     {
      "t": 22.0,
      "rate": 0.0
     }
    ]
   }
  },
  "sampled_clips": 271,
  "low_visibility_clips": 73,
  "fully_counted_days": [
   "2026-08-20",
   "2026-08-23"
  ],
  "counted_day_threshold": 0.9,
  "day_types": {
   "weekday": {
    "source": "observed",
    "people": 3863,
    "basis_days": [
     "2026-08-17",
     "2026-08-18",
     "2026-08-19",
     "2026-08-20"
    ],
    "basis_measured_fraction": 0.288,
    "relative_to_weekday": 1.0
   },
   "friday": {
    "source": "observed",
    "people": 4671,
    "basis_days": [
     "2026-08-21"
    ],
    "basis_measured_fraction": 0.788,
    "relative_to_weekday": 1.209
   },
   "weekend": {
    "source": "observed",
    "people": 8618,
    "basis_days": [
     "2026-08-16",
     "2026-08-22",
     "2026-08-23"
    ],
    "basis_measured_fraction": 0.479,
    "relative_to_weekday": 2.231
   }
  },
  "fallback_day_type_factors": {
   "friday_afternoon": 1.15,
   "friday_start_hour": 12,
   "friday_end_hour": 19,
   "weekend": 1.45
  }
 },
 "dates": [
  "2026-08-17",
  "2026-08-18",
  "2026-08-19",
  "2026-08-20",
  "2026-08-21",
  "2026-08-22",
  "2026-08-23"
 ]
}