def METHOD_NAME(y_data, first_sensor_date, geo_id, logger, num_col="num", den_col="den"):
    """Fitting routine.
    Args:
        y_data: dataframe for one geo_id, indexed by date
        first_sensor_date: datetime of first date
        geo_id: unique identifier for the location column
        num_col: str name of numerator column
        den_col: str name of denominator column
    Returns:
        dictionary of results
    """
    # backfill
    total_counts, total_visits = CHCSensor.backfill(y_data[num_col].values,
                                                    y_data[den_col].values)
    # calculate smoothed counts and jeffreys rate
    # the left_gauss_linear smoother is not guaranteed to return values greater than 0
    rates = total_counts.flatten() / total_visits
    smoothed_rate = CHCSensor.smoother.smooth(rates)
    clipped_smoothed_rate = np.clip(smoothed_rate, 0, 1)
    jeffreys_rate = (clipped_smoothed_rate * total_visits + 0.5) / (total_visits + 1)
    # cut off at sensor indexes
    rate_data = pd.DataFrame({'rate': jeffreys_rate, 'den': total_visits},
                             index=y_data.index)
    rate_data = rate_data[first_sensor_date:]
    include = rate_data['den'] >= Config.MIN_DEN
    valid_rates = rate_data[include]
    se_valid = valid_rates.eval('sqrt(rate * (1 - rate) / den)')
    rate_data['se'] = se_valid
    logger.debug("{0}: {1:.3f},[{2:.3f}]".format(
        geo_id, rate_data['rate'][-1], rate_data['se'][-1]
    ))
    return {"geo_id": geo_id,
            "rate": 100 * rate_data['rate'],
            "se": 100 * rate_data['se'],
            "incl": include}