Problem Constraints
- Size of the data set, but not the data itself, is known.
- Data set grows by one data point at a time.
- Trend line is graphed one data point at a time (using a spline/Bezier curve).
Graphs
The collage below shows data sets with reasonably accurate trend lines:
The graphs are:
- Upper-left. By hour, with ~24 data points.
- Upper-right. By day for one year, with ~365 data points.
- Lower-left. By week for one year, with ~52 data points.
- Lower-right. By month for one year, with ~12 data points.
User Inputs
The user can select:
- the type of time series (hourly, daily, monthly, quarterly, annual); and
- the start and end dates for the time series.
For example, the user could select a daily report for 30 days in June.
Trend Weight
To calculate the window size (i.e., the number of data points to average when calculating the trend line), the following expression is used:
data points / trend weight
Where data points is derived from user inputs and trend weight is 6.4. Even though a trend weight of 6.4 produces good fits, it is rather arbitrary, and might not be appropriate for different user inputs.
Question
How should trend weight be calculated given the constraints of this problem?

Based on the looks of the graphs I would say you have too many points for your 12 point graph (it is just a spline of the points given… which is visually pleasing, but actually does more harm than good when trying to understand the trend) and too few points for your 365 point graph. Perhaps try doing something a little exponential like:
I do realize this is even more arbitrary than what you already have, but arbitrary isn’t the worst thing in the world.
(I got 14.1 by trying to keep the 52 point graph fixed, since that one looks nice, by taking
(52^(1.2)/52)*6.4=14.1. You using this technique you could try other powers besides 1.2 to see what you visually get.Dan