For my bathroom humidity fan control, I created a slow-moving average device, and then compare current humidity with the slow-moving average to detect when it rises. This has proven to be a very reliable detector of when someone is showering.

The averager App is derived from Bruces code, with some modifications by me.
definition(
name: "Average Humidity",
namespace: "hubitat",
author: "Bruce Ravenel",
description: "Average a humidity sensor",
category: "Convenience",
iconUrl: "",
iconX2Url: "")
preferences {
page(name: "mainPage")
}
def mainPage() {
dynamicPage(name: "mainPage", title: " ", install: true, uninstall: true) {
section {
input "thisName", "text", title: "Name this humidity averager", submitOnChange: true
if(thisName) app.updateLabel("$thisName")
input "humidSensor", "capability.relativeHumidityMeasurement", title: "Select Humidity Sensor", submitOnChange: true, required: true
input name: "nOption", type: "number", defaultValue: "10", range: "10..200", title: "Number of Samples to average.", description: "10 samples will be very responsive, while 200 samples is quite slow.", required: true
}
}
}
def installed() {
initialize()
}
def updated() {
unsubscribe()
initialize()
}
def initialize() {
def averageDev = getChildDevice("AverageHumid_${app.id}")
if(!averageDev) averageDev = addChildDevice("hubitat", "Virtual Humidity Sensor", "AverageHumid_${app.id}", null, [label: thisName, name: thisName])
averageDev.setHumidity(50)
subscribe(humidSensor, "humidity", handler)
}
def averageHumid() {
def n = nOption as Integer
def averageDev = getChildDevice("AverageHumid_${app.id}")
def float av = averageDev.currentHumidity
av -= av / n
av += humidSensor.currentHumidity / n
return av.toDouble().round(1)
}
def handler(evt) {
def averageDev = getChildDevice("AverageHumid_${app.id}")
def avg = averageHumid()
averageDev.setHumidity(avg)
}