Definition and Taxonomy of Seasonal Time Series I want to

*

*categorize a large number of time series into non-seasonal and seasonal

*divide the seasonal ones into a small number of subgroups by type of seasonality

Are there any formal definitions/taxonomies of seasonality out there?
Or is this an "I know it when I see it" kind of phenomenon (to paraphrase Justice Potter Stewart)?
I don't want to reinvent the wheel here, so I am curious if there is existing wisdom on how to do this well.
Here are a couple of off-the-cuff ideas:

*

*A simple concentration-index definition could be the sum of the
squared shares of the total for each time unit: $$\sum_{t=1}^{T}
   \left(\frac{y_t}{\sum_{t=1}^{T}y_t} \right)^2 $$
When that sum exceeds some threshold, a series would be considered
seasonal.


*A more complicated approach would be to decompose a time series into
trend, seasonal, cyclical, and idiosyncratic components and calculate
the fraction of total variation due to the seasonal part. A series
would be seasonal if that fraction exceeds some threshold.


*The next step would be to cluster the shares or the seasonal components into groups that are similar.
 A: Decomposing the time series into trend, seasonal, cyclical, and idiosyncratic components may be easier than you think.
Suppose our dates are in years since 2020, so that $t=0.0$ is January 1, 2020, $t=1.0$ is January 1, 2021, and $t=1.5$ is July 1, 2021.
Trend and Seasonality
We can analyze seasonality with sines and cosines, which is especially simple when the maximum and minimum seasons are six months apart. We get both trend and seasonality for such a time series $y_t$ using a linear regression of the form
$$y_t = a + bt + c\sin(2\pi t) + d\cos(2\pi t)$$
A significant $b$ in the equation can show significant trend, and a significant $c$ or $d$ can show significant seasonality, if the model is not invalidated by autocorrelation, heteroskedasticity, multicollinearity, or nonnormality. By using a two-argument arctan function like atan2 in R or math.atan2 in Python), we can also rewrite the equation as
$$y_t = a + bt + \sqrt{c^2+d^2}\cos(2\pi t - \arctan(c,d))$$
Then the peak month in this model is roughly $\text{round}(1/2+6\arctan(c,d)/\pi)$, and we can classify the seasonalities by those months.
Cyclicality and More Terms
For a cycle starting at time $0$, we can detect a combination of trend, seasonality and cyclicality by adding the term
$$e(1-\cos(2\pi t/p))$$
to the regression, where $e$ is the coefficient to be fit, and $p$ is the period of the cycle (in years). E.g. we can model the current solar cycle, which has an estimated period of $p=11$ years, and started with minimal sunspots at the beginning of 2020.
We can extend this model easily for cyclicality starting at other times, for trends that speed up or slow down, and for seasonality where the maximum and minimum have different shapes. If this gives us more significant coefficients, then some clustering analysis may be useful.
Meanwhile, the basic analysis above is practical and can already give some insight.
