독립변수들의 값을 찾고 싶은데 중첩for문, dataframe 활용 등을 통해서도 값이 출력되지 않습니다.
조회수 320회
주어진 데이터는 day1, day2, day3, cash, 그리고 종속변수인 NAV이며
NAV = 10071696173
day1 = 1+np.array([-0.01086,-0.01052,-0.01402,-0.01738,0.00554,0.00700,-0.00767,-0.00156,-0.00124,-0.00080,-0.04595,0.01138,0.01195,-0.01243,0.00010])
day2 = 1+np.array([0.00556,-0.00433,0.01961,0.01846,0.00910,0.01639,0.00159,-0.00005,-0.00332,0.00925,0.02452,-0.00562,0.00762,0.00787,0.00015])
day3 = 1+np.array([-0.01858,-0.02611,-0.01913,-0.00038,0.00792,0.01221,-0.01090,-0.00220,0.00000,-0.01474,0.02564,0.01810,0.01190,-0.01197,-0.00015])
cash = 10000000000
sum1 = np.ones(15)
sum1 = sum1.T
독립변수 a1~g1을 활용해서 NAV을 구하는 식은 다음과 같습니다.
X= np.array([a1,a2,b1,b2,b3,b4,c1,c2,c3,d1,d2,e1,f1,f2,g1])
day3_NAV=([int(round(x,6)) for x in ([int(round(x,6)) for x in (0.01*cash*X*day1*day2)]*day3)]@sum1)+int(round(cash*(1-0.0100015*X@sum1),6))
if day3_NAV==NAV:
print(X)
이때 독립변수들의 값을 찾을려고 하는데 중첩 for문과 dataframe으로 변환해서 만든 알고리즘의 경우는 N값이 너무 커서 작동하지 않습니다.
import numpy as np
NAV = 10071696173
day1 = 1+np.array([-0.01086,-0.01052,-0.01402,-0.01738,0.00554,0.00700,-0.00767,-0.00156,-0.00124,-0.00080,-0.04595,0.01138,0.01195,-0.01243,0.00010])
day2 = 1+np.array([0.00556,-0.00433,0.01961,0.01846,0.00910,0.01639,0.00159,-0.00005,-0.00332,0.00925,0.02452,-0.00562,0.00762,0.00787,0.00015])
day3 = 1+np.array([-0.01858,-0.02611,-0.01913,-0.00038,0.00792,0.01221,-0.01090,-0.00220,0.00000,-0.01474,0.02564,0.01810,0.01190,-0.01197,-0.00015])
cash = 10000000000
sum1 = np.ones(15)
sum1 = sum1.T
for a1 in range(41):
for a2 in range(21):
if a1+a2>=10 and a1+a2<=40:
for b1 in range(21):
for b2 in range(21):
for b3 in range(21):
for b4 in range(21):
if b1+b2+b3+b4>=10 and b1+b2+b3+b4<=40:
for c1 in range(51):
for c2 in range(41):
for c3 in range(5,41):
if c1+c2+c3<=60 and c1+c2+c3>=20:
for d1 in range(16):
for d2 in range(16):
if d1+d2>=5 and d1+d2<=20:
for e1 in range(21):
for f1 in range(21):
for f2 in range(21):
for g1 in range(51):
X= np.array([a1,a2,b1,b2,b3,b4,c1,c2,c3,d1,d2,e1,f1,f2,g1])
day3_NAV=([int(round(x,6)) for x in ([int(round(x,6)) for x in (0.01*cash*X*day1*day2)]*day3)]@sum1)+int(round(cash*(1-0.0100015*X@sum1),6))
if day3_NAV==NAV:
print(X)
exit(0)
import pandas as pd
from functools import reduce
import numpy as np
NAV = 10071696173
day1 = 1+np.array([-0.01086,-0.01052,-0.01402,-0.01738,0.00554,0.00700,-0.00767,-0.00156,-0.00124,-0.00080,-0.04595,0.01138,0.01195,-0.01243,0.00010])
day2 = 1+np.array([0.00556,-0.00433,0.01961,0.01846,0.00910,0.01639,0.00159,-0.00005,-0.00332,0.00925,0.02452,-0.00562,0.00762,0.00787,0.00015])
day3 = 1+np.array([-0.01858,-0.02611,-0.01913,-0.00038,0.00792,0.01221,-0.01090,-0.00220,0.00000,-0.01474,0.02564,0.01810,0.01190,-0.01197,-0.00015])
cash = 10000000000
sum1 = np.ones(15)
sum1 = sum1.T
a1df = pd.DataFrame({'a1': range(41), 'key': 1})
a2df = pd.DataFrame({'a2': range(21), 'key': 1})
b1df = pd.DataFrame({'b1': range(21), 'key': 1})
b2df = pd.DataFrame({'b2': range(21), 'key': 1})
b3df = pd.DataFrame({'b3': range(21), 'key': 1})
b4df = pd.DataFrame({'b4': range(21), 'key': 1})
c1df = pd.DataFrame({'c1': range(51), 'key': 1})
c2df = pd.DataFrame({'c2': range(41), 'key': 1})
c3df = pd.DataFrame({'c3': range(5,41), 'key': 1})
d1df = pd.DataFrame({'d1': range(16), 'key': 1})
d2df = pd.DataFrame({'d2': range(16), 'key': 1})
e1df = pd.DataFrame({'e1': range(21), 'key': 1})
f1df = pd.DataFrame({'f1': range(21), 'key': 1})
f2df = pd.DataFrame({'f2': range(21), 'key': 1})
g1df = pd.DataFrame({'g1': range(51), 'key': 1})
dfs = [a1df,a2df,b1df,b2df,b3df,b4df,c1df,c2df,c3df,d1df,d2df,e1df,f1df,f2df,g1df]
df = reduce(lambda left,right: pd.merge(left,right, on=['key']),dfs)[['a1','a2','b1','b2','b3','b4','c1','c2','c3','d1','d2','e1','f1','f2','g1']]
for a in range(11163200):
X=df.values[a]
day3_NAV=([int(round(x,6)) for x in ([int(round(x,6)) for x in (0.01*cash*X*day1*day2)]*day3)]@sum1)+int(round(cash*(1-0.0100015*X@sum1),6))
if day3_NAV==NAV:
print(X)
break
혹시 다른 방법이 있을까요?
댓글 입력