random_df = IntermittentDemandGenerator(
engine="polars", min_length=180, max_length=180, freq="D",
demand_probability=0.2, demand_distribution="poisson", demand_mean=10.0,
intermittent_pattern="random", seed=42,
).generate(n_series=1)
clustered_df = IntermittentDemandGenerator(
engine="polars", min_length=180, max_length=180, freq="D",
demand_probability=0.2, demand_distribution="poisson", demand_mean=10.0,
intermittent_pattern="clustered", cluster_size=5, seed=42,
).generate(n_series=1)
seasonal_df = IntermittentDemandGenerator(
engine="polars", min_length=180, max_length=180, freq="D",
demand_probability=0.2, demand_distribution="poisson", demand_mean=10.0,
intermittent_pattern="seasonal", seasonal_period=30, seed=42,
).generate(n_series=1)
fig, axes = plt.subplots(3, 1, figsize=(12, 7.5), sharex=True)
panels = [("random", random_df), ("clustered", clustered_df), ("seasonal", seasonal_df)]
for ax, (label, df) in zip(axes, panels):
values = df["y"].to_list()
nonzero = sum(1 for value in values if value > 0)
ax.stem(df["ds"].to_list(), values, linefmt="C0-", markerfmt="C0o", basefmt="k-")
ax.set(ylabel="Demand", title=f"{label} ({nonzero / len(values):.0%} of periods non-zero)")
axes[-1].set_xlabel("Timestamp")
plt.tight_layout()
plt.show()