import numpy as np
import pandas as pd
readings = pd.read_csv("readings.csv")["value"]
base = readings.iloc[:100] # 前 100 筆是確認過的穩定期
center, sigma = base.mean(), base.std()
upper, lower = center + 3 * sigma, center - 3 * sigma
monitor = readings.iloc[100:] # 基準期之後才開始監控
alpha = 0.2
ewma = pd.concat([pd.Series([center]), monitor]).ewm(alpha=alpha, adjust=False).mean().iloc[1:]
ewma.index = monitor.index # EWMA 從中心值起算
limit = 3 * sigma * np.sqrt(alpha / (2 - alpha))
raw_alarm = monitor[(monitor > upper) | (monitor < lower)].index.min()
ewma_alarm = ewma[(ewma - center).abs() > limit].index.min()
print("單點超限首次出現", raw_alarm, "EWMA 首次出現", ewma_alarm)