High use or cost per day audit

The High Use per Day or High Cost per Day audits detect when a bill shows unusually high average daily use or cost compared to the meter's historical use and cost.

It works by comparing the current bill's use per day or cost per day with a conservative threshold based on prior bills. If the current bill's use per day or cost per day is 3x higher than that threshold, the bill is flagged.

Historic bills

Historic bills are past bills on the same meter that:

  • Have a begin date earlier than the current bill.
  • Have an average daily use > 0 for the billing period. (excludes the current bill)
  • Requires at least 5 valid bills to perform the check, if fewer than 5 the audit is skipped. 

Threshold calculation

  1. Collect all the valid historic bills for the previous 4 years.
  2. Sort the historic bills by use per day or cost per day (ascending).
  3. Trim the top 10% of the historic bills to remove outliers. If fewer than 10 bills, no trimming occurs.
  4. Find the max use/day or cost/day of the trimmed set.
  5. Compute the max allowed use per day or cost per day as:
    • maxAllowedUsePerDay = remainingMaxUserPerDay x 3

Flagging rule

The current bill is flagged if:

  • currentBillUsePerDay >= maxAllowedUsePerDay or
  • currentBillCostPerDay >= max AllowedCostPerDay

FAQ

Why trim the top 10%?
High outliers in historic data (for example, unusual operations, leaks, one-time events) can inflate the threshold and hide real issues. Trimming the highest 10% of bills reduces the impact of those outliers while still using the meter's actual history.

Why use the highest remaining historic use/day instead of average?
Using the max (after trimming) yields a conservative benchmark: the current bill must exceed the worst typical case by 3x to flag, which reduces false positives.

What if there's a bill error or missing days?
Erroneous use/day or cost/day in history can shift the threshold. The 10% trim mitigates this: still, correct bad data where possible.

Does the audit consider seasonality or weather?
Not directly. This audit is intentionally simple and robust. For weather-aware detection, pair with degree-day normalized audits.

Examples

Example A - 10 historic bills

  • Historic count: 10 bills
  • Trim: 1 bill [Trim off 10% of the top bills (10 x 0.10 = 1)]
  • Remaining max use/day (after trim): 80 gallons
  • Max allowed = 80 x 3 = 240 gallons
  • Current bill = 245 gallons → Flagged bill (245 >= 240)

Example B - 7 historic bills

  • Historic counts: 7 bills
  • Trim: 0 bills (7 x 0.10 = 0.7 → floor = 0) *floor is a round down function. Cannot remove .7 of a bill, so no bills are trimmed.
  • Remaining max use/day: 100 Therm
  • Max allowed: 100 x 3 = 300 Therm
  • Current bill: 275 Therm → Bill not flagged (275 < 300)

Example C - less than 5 historic bills

  • Historic counts: 4 bills
  • Fewer than 5 bills → audit skipped