0

我在这个领域很新。我正在尝试迭代一些 SARIMAX 模型并将数据存储在 Dataframe 中。但是在我的 M1 Macbook 中运行这些单元需要 10 多分钟。有没有更好的方法来编写这些行以获得相同的结果?

P=D=Q= range (0,3)

s=12
PDQ=itertools.product(P,D,Q)

PDQS=[]
for x in list(PDQ):
    PDQS.append((x[0],x[1],x[2],s))
import warnings
warnings.simplefilter('ignore')


cols = ['p', 'd', 'q', 'sP', 'sD', 'sQ','s','AIC', 'BIC']
Results = pd.DataFrame(np.zeros((3*5*3*len(PDQS),len(cols))))

Results.columns = cols

mod_num=0
for p in range(5):
    for d in range(3):
        for q in range(5):
            for seasonal_order in PDQS:
                if p == 0 and q == 0:
                    continue

                 
                mod = sm.tsa.statespace.SARIMAX(df_Sales['Sales'].astype(float), order=(p,d,q), seasonal_order= seasonal_order, enforce_invertibility=False)
                try:
                    res = mod.fit(disp=False)
                    
                    Results.iloc[mod_num,0] = p
                    Results.iloc[mod_num,1] = d
                    Results.iloc[mod_num,2] = q
                    Results.iloc[mod_num,3] = seasonal_order[0]
                    Results.iloc[mod_num,4] = seasonal_order[1]
                    Results.iloc[mod_num,5] = seasonal_order[2]
                    Results.iloc[mod_num,6] = seasonal_order[3]
                    Results.iloc[mod_num,7] = res.aic
                    Results.iloc[mod_num,8] = res.bic

                    mod_num+=1

                except:
                    continue
Results
                                    
                

我还尝试了与 (P,D,Q,S) 一样的小型 (p,d,q) 的 itertools,但它甚至花费了两倍以上的时间。

4

0 回答 0