2016-06-29 6 views
0

私は予測誤差を最小限に抑えるために、正しい「落ち込み率」(r)を選択しています。私はまだPandasにはかなり新しく、SciPyにはまったく新しいものです。助けてください!fminによる予測誤差を最小限に抑える方法

import pandas as pd 
from scipy.optimize import fmin 

data = pd.DataFrame({'Division': [1,2,3]*3, 
        'Month': ['May','May','May','June','June','Jun','Jul','Jul','Jul'], 
        'Definite_Units':[8]*9, 
        'Maybe_Units':[3,2,1]*3, 
        'Actually_Shipped_Units':[9]*9}) 

p = lambda r,x,y: x+y*r 
e = lambda r,x,y,z: abs(1-(p(x,y,r)/z)) 

x = div_data['Definite_Units'].sum 
y = div_data['Maybe_Units'].sum 
z = div_data['Actually_Shipped_Units'].sum 

for d in range(1,4): 
    r0 = 1 
    div_data = data['Division']=d 
    x = div_data['Definite_Units'].sum() 
    y = div_data['Maybe_Units'].sum() 
    z = div_data['Actually_Shipped_Units'].sum() 
    t = fmin(e,r0,args=(x,y,z)) 
    print d, t 

eを最小化する各除算に対してrが必要です。

したがって、この場合には私の出力は次のようになります

  • ディビジョン1:R = 0.33、E = 0
  • ディビジョン2:R = 0.50、E = 0
  • 部門3:R = 1.00、E = 0
+0

そこで質問...私はRを得るために、これを設定するのですか – sascha

+0

@saschaは何eを最小化する各部門について? – Mateyobi

+0

私はfminがargsを配列に必要としていることを理解しています。 – Mateyobi

答えて

0

は、だから私はこのプロジェクトの中にFMINに関するいくつかのことを学びました:

-Argumentsは配列形式で私は再なされなければなりませんturn_arrayヘルパー関数。

- 最適化する変数は、最小化する関数の最初に表示する必要があります。だから私のためにはe(r、c、u、s)でなくe(c、u、s、r)でなければならなかった。

#calculate new fall out rates with fmin 
import numpy as np 
import pandas as pd 
from scipy.optimize import fmin 

data = pd.DataFrame({'DIV': [1,2,3]*3, 
        'MONTH': ['May','May','May','June','June','Jun','Jul','Jul','Jul'], 
        'C':[8]*9, 
        'U':[3,2,1]*3, 
        'S':[9]*9}) 

data.to_csv(r'C:\Users\mbabski\Documents\Unit Plan Summer 2016\data_test.csv') 

def return_array(x): 
    return x.values 

def mape(c,u,s,r): #returns an array of line level Mean Absolute Percentage Errors 
    p = c + u * r #calculates the forecasted number number 
    m = abs(1.0-(p/s)) #calculates the MAPE at the line level 
    return m 

def e(r,c,u,s): #calculates average of the MAPEs 
    return np.mean(mape(c,u,s,r)) 

for d in range(1,4): 
    div_data = data[data.DIV==d] 
    c = return_array(div_data.C) 
    u = return_array(div_data.U) 
    s = return_array(div_data.S) 
    r0 = [[1.0]] 
    t = fmin(e,r0,args=(c,u,s)) 
    print 'r:',t 

最適化が正常に終了しました。
現在関数値:0.000011
反復:16件の
関数評価:32
R:正常終了[0.33330078]
最適。
現在関数値:0.000000
反復:15件の
関数評価:30
R:正常終了[0.5]
最適。
現在の関数の値:0.000000
反復:10件の
関数評価:20
R:[1]

関連する問題