Följande artikel hjälper dig: Aktieprisprediktionsmodell för Netflix – Mot AI
En jämförande studie av linjär regression, K-Nearest Neighbor (KNN) och Support Vector Machine (SVM)
Syftet med den här artikeln är att utforma en linjär modell för aktieprognoser för att förutsäga slutkursen för Netflix. Detta kommer att vara en jämförande studie av olika maskininlärningsmodeller såsom linjär regression, K-närmaste granne och stödvektormaskiner.
Innan jag designade modellen gick jag igenom några av de investeringsrelaterade bloggarna och artiklarna på internet för att få en bättre förståelse av saken och jag fick reda på några nyckelindikatorer som bestämmer öppnings- och stängningskursen för en aktie. Därför kommer den här handledningen om träning av modellen inte att vara begränsad till en enda funktion, utan det kommer att vara en utbildad modell med flera funktioner.
Aktiemarknadens grundläggande påverkansfaktor
Som datavetare eller ml-proffs underlättar det vårt arbete när vi har en affärsmässig eller funktionell klarhet i vad vi försöker bygga, så jag tänkte att jag måste dela med mig av lite affärsinsikt också, men jag är inte ett aktiemarknadsproffs. men jag trodde att det skulle bygga upp en förståelse. så i princip slutkurs är det senaste priset som en köpare betalade för den aktuella aktien under kontorstid och öppningspriset är priset för den första transaktionen av aktien, och det är ett mycket vanligt fenomen inom aktiehandel att en öppningspris kan skilja sig från slutkursen, anledningen är fluktuationen mellan efterfrågan och utbud som avgör hur attraktiv en aktie är. detta fenomen kallas AHT (handel efter arbetstid) som spelar en avgörande roll för att flytta öppningspriset på en aktie. det finns andra faktorer och jag är ingen expert på sådana frågor så jag tänker inte gräva djupt i det. denna lilla informationsbit skulle ge en grundläggande inblick i det verkliga problemet.så utan att slösa mer låt oss hoppa till lösningen “kodning”
1. Importförutsättningar:
importera pandor som pd från sklearn.linear_model import LinearRegression från sklearn.model_selection import train_test_split importera matplotlib.pyplot som plt importera numpy som np importera pandas_datareader som webb
pandas_datareader-biblioteket låter oss ansluta till webbplatsen och extrahera data direkt från internetkällor i vårt fall extraherar vi data från Yahoo Finance API.
2. Läs och visa
df = web.DataReader(‘NFLX’, data_source=’yahoo’, start=’2012–01–01′, end=’2020–04–28′) df.tail(10)
df.reset_index(inplace=True) df.describe()
3. Kontrollera efter korrelation
Innan vi kollar efter korrelation kan vi förstå vad exakt det är?
Korrelation är ett mått på association eller beroende mellan två egenskaper, dvs hur mycket Y kommer att variera med en variation i X. Korrelationsmetoden som vi kommer att använda är Pearson-korrelationen.
Pearson korrelationskoefficient är det mest populära sättet att mäta korrelation, värdeintervallet varierar från -1 till 1. I matematik/fysiktermer kan det förstås som att två egenskaper är positivt korrelerade då de är direkt proportionerlig och om de delar negativ korrelation så är de det omvänt proportionell.
corr = df.corr(metod=’pearson’) corr
Inte all text är förståelig, låt oss visualisera korrelationskoefficienten.
importera seaborn som sb sb.heatmap(corr,xticklabels=corr.columns, yticklabels=corr.columns, cmap=’RdBu_r’, annot=True, linewidth=0.5)
The Dark Maroon zone är inte Maroon5, haha skämt, men det betecknar de mycket korrelerade egenskaperna.
4. Visualisera den beroende variabeln med oberoende funktioner
#prepare dataset för att fungera med nflx_df=df[[‘Date’,’High’,’Open’,’Low’,’Close’]]nflx_df.head(10) plt.figure(figsize=(16,8)) plt.title(‘Netflix Aktiers slutkurshistorik 2012-2020’) plt.plot(nflx_df[‘Date’],nflx_df[‘Close’]) plt.xlabel(‘Date’,fontsize=18) plt.ylabel(‘Stängpris US($)’,fontsize=18) plt.style.use(‘fivethirtyeight’) plt.show()
#Plot Open vs Close nflx_df[[‘Open’,’Close’]].head(20).plot(kind=’bar’,figsize=(16,8)) plt.grid(which=”major”, linestyle=”-“, linewidth=”0.5″, color=”green” ) plt.grid(which=”minor”, linestyle=”:”, linewidth=”0.5″, color=”black”) plt.show()
#Plot High vs Close nflx_df[[‘High’,’Close’]].head(20).plot(kind=’bar’,figsize=(16,8)) plt.grid(which=”major”, linestyle=”-“, linewidth=”0.5″, color=”green” ) plt.grid(which=”minor”, linestyle=”:”, linewidth=”0.5″, color=”black”) plt.show()
#Plot Low vs Close nflx_df[[‘Low’,’Close’]].head(20).plot(kind=’bar’,figsize=(16,8)) plt.grid(which=’major’, linestyle=’-‘, linewidth=’0.5′, color=’green’ ) plt.grid(which=’minor’, linestyle=’:’, linewidth=’0.5′, color=’black’) plt.show()
5. Modellutbildning och testning
#Datumformat är DateTime och det kommer att ge ett fel under träning så jag har skapat separata månads-, år- och datumenheter nflx_df[‘Year’]=df[‘Date’].dt.år nflx_df[‘Month’]=df[‘Date’].dt.månad nflx_df[‘Day’]=df[‘Date’].dt.dag
Skapa den slutliga datamängden för modellträning
nfx_df=nflx_df[[‘Day’,’Month’,’Year’,’High’,’Open’,’Low’,’Close’]]nfx_df.head(10)
#separate Oberoende och beroende variabel X = nfx_df.iloc[:,nfx_df.columns !=’Close’]Y= nfx_df.iloc[:, 5]print(X.shape) #output: (2093, 6) print(Y.shape) #output: (2093,)
Dela upp datasetet i träna och testa
från sklearn.model_selection import train_test_split x_train,x_test,y_train,y_test= train_test_split(X,Y,test_size=.25) print(x_train.shape) #output: (1569, 6) print(x_test.shape) #output: (524) , 6) print(y_train.shape) #output: (1569,) print(y_test.shape) #output: (524,) #y_test ska utvärderas med y_pred för Diff-modeller
Modell 1: Linjär regression
Linjär regressionsmodell träning och testning
lr_model=LinearRegression() lr_model.fit(x_train,y_train) y_pred=lr_model.predict(x_test)
Linjär modell korsvalidering
Vad är exakt korsvalidering?
I grund och botten är korsvalidering en teknik som använder vilken modell som utvärderas på datamängden som den inte är tränad på, dvs det kan vara en testdata eller kan vara en annan uppsättning beroende på tillgänglighet eller genomförbarhet.
från sklearn import model_selection från sklearn.model_selection import KFold kfold = model_selection.KFold(n_splits=20, random_state=100) results_kfold = model_selection.cross_val_score(lr_model, x_test, y_test.astype(‘int’)), print(kfold) Noggrannhet: “, results_kfold.mean()*100) #output: Noggrannhet: 99.999366595175
Plot faktiskt vs förutsagt värde
plot_df=pd.DataFrame({‘Actual’:y_test,’Pred’:y_pred}) plot_df.head(20).plot(kind=’bar’,figsize=(16,8)) plt.grid(which=” major”, linestyle=”-“, linewidth=”0.5″, color=”green”) plt.grid(which=”minor”, linestyle=”:”, linewidth=”0.5″, color=”black”) plt .show()
Modell 2: KNN K-närmaste granne Regressionsmodell
KNN Model Training and Testing
från sklearn.neighbors import KNeighborsRegressor knn_regressor=KNeighborsRegressor(n_neighbors = 5) knn_model=knn_regressor.fit(x_train,y_train) y_knn_pred=knn_model.predict(x_test)
KNN-korsvalidering
knn_kfold = model_selection.KFold(n_splits=20, random_state=100) results_kfold = model_selection.cross_val_score(knn_model, x_test, y_test.astype(‘int’), cv=knn_kfold) print(“Noggrannhet: “, results_kfold.mean 100) #output: Noggrannhet: 99,93813335235933
Handling Faktisk vs förutspådd
plot_knn_df=pd.DataFrame({‘Actual’:y_test,’Pred’:y_knn_pred}) plot_knn_df.head(20).plot(kind=’bar’,figsize=(16,8)) plt.grid(which=’ major’, linestyle=’-‘, linewidth=’0.5′, color=’green’) plt.grid(which=’minor’, linestyle=’:’, linewidth=’0.5′, color=’black’) plt .show()
Modell 3: SVM Support Vector Machine Regression Model
SVM Model Training and Testing
från sklearn.svm import SVR svm_regressor = SVR(kernel=’linear’) svm_model=svm_regressor.fit(x_train,y_train) y_svm_pred=svm_model.predict(x_test)
Handling Faktisk vs förutspådd
plot_svm_df=pd.DataFrame({‘Actual’:y_test,’Pred’:y_svm_pred}) plot_svm_df.head(20).plot(kind=’bar’,figsize=(16,8)) plt.grid(which=’ major’, linestyle=’-‘, linewidth=’0.5′, color=’green’) plt.grid(which=’minor’, linestyle=’:’, linewidth=’0.5′, color=’black’) plt .show()
RMSE (Root Mean Square Error)
Root Mean Square Error är standardavvikelsen för residualer, som är ett mått på hur långt datapunkter är från regressionen. Eller enkelt uttryckt hur koncentrerade datapunkterna är runt den bästa passformen.
från sklearn.metrics import mean_squared_error , r2_score import math lr_mse=math.sqrt(mean_squared_error(y_test,y_pred)) print(‘Linear Model Root mean square error’,lr_mse) knn_mse=math.sqrt_red_mean (‘KNN Model Root mean square error’,mse) svm_mse=math.sqrt(mean_squared_error(y_test,y_svm_pred)) print(‘SVM Model Root mean square error SVM’,svm_mse) #outputs as below: Linear Model Root mean square error 1,7539775065782694e-14 KNN modell Root mean square error 1,7539775065782694e-14 SVM Model Root mean square error SVM 0,0696764093622963
R2 eller r-kvadratfel
R2 eller r2 poäng varierar mellan 0 och 100%.
Matematisk formel för r2 poäng :(y_test[i]— y_pred[i]) **2
print(‘Linear R2: ‘, r2_score(y_test, y_pred)) print(‘KNN R2: ‘, r2_score(y_test, y_knn_pred)) print(‘SVM R2: ‘, r2_score(y_test, y_svm_pred)) #output enligt nedan: Linjär R2: 1,0 KNN R2: 0,9997974105145412 SVM R2: 0,9999996581785765
För grundläggande matematisk förståelse på RMSE och R2 fel hänvisa till min blogg: https://www.geeksforgeeks.org/ml-mathematical-explanation-of-rmse-and-r-squared-error/
Vår modell ser väldigt bra ut med fenomenal statistik.
Sammanfattning:
· Användning av förutsättningsbibliotek
· Dataextraktion från webben med hjälp av pandas_datareader
· Grundläggande aktieförståelse
· Modellträning och testning
· ML-algoritmer som t.ex Linjär regression, K-närmaste granne och Stöd Vector Machines
· Kfold-korsvalidering av modeller
· Python sjöfödd bibliotek för att visualisera korrelationsvärmekarta
· Pearson korrelation
· Funktionsplottning mot beroende utdata med Matplotlib.
· Plottning av verkligt värde med det förutsagda värdet.
· Root Mean Square Fel (RMSE).
· R-kvadratfel
Tack till alla för att ni läser min blogg och om ni gillar mitt innehåll och min förklaring, följ mig på medium och dela er feedback, vilket alltid kommer att hjälpa oss alla att förbättra vår kunskap.
Tack för att du läser!
Vivek Chaudhary
Aktieprisprediktionsmodell för Netflix publicerades ursprungligen i Towards AI — Multidisciplinary Science Journal on Medium, där människor fortsätter samtalet genom att lyfta fram och svara på den här historien.