14

मैं स्टोर बिक्री पूर्वानुमान करने के लिए LSTM उपयोग करने के लिए कोशिश कर रहा हूँ।बाहरी सुविधाओं के साथ समय श्रृंखला बहु-चरण क्षितिज के लिए एलएसटीएम में इनपुट डेटा कैसे बनाया जाए?

|  Date | StoreID | Sales | Temperature | Open | StoreType | 
|------------|---------|-------|-------------|---------|-----------| 
| 01/01/2016 | 1  | 0 |  36  | 0 |  1  | 
| 01/02/2016 | 1  | 10100 |  42  | 1 |  1  | 
| ... 
| 12/31/2016 | 1  | 14300 |  39  | 1 |  1  | 
| 01/01/2016 | 2  | 25000 |  46  | 1 |  3  | 
| 01/02/2016 | 2  | 23700 |  43  | 1 |  3  | 
| ... 
| 12/31/2016 | 2  | 20600 |  37  | 1 |  3  | 
| ... 
| 12/31/2016 | 10 | 19800 |  52  | 1 |  2  | 

मैं अगले 10 दिनों की बिक्री के लिए की भविष्यवाणी करने की जरूरत है: यहाँ कैसे मेरे कच्चे डेटा की तरह लग रही है। इस उदाहरण में, मुझे 01-01-2017 से 01-10-2017 तक स्टोर बिक्री की भविष्यवाणी करने की आवश्यकता होगी। मुझे पता है कि इस समस्या को हल करने के लिए अन्य समय श्रृंखला मॉडल या रिग्रेशन मॉडल का उपयोग कैसे करें, लेकिन मैं जानना चाहता हूं कि आरएनएन-एलएसटीएम इसके लिए एक अच्छा उम्मीदवार है या नहीं।

मैं केवल storeID = 1 डेटा लेने LSTM का परीक्षण करने के द्वारा शुरू कर दिया। अपने डेटा केवल दिनांक और बिक्री है। दो

trainX.shape 
(300, 1, 20) 
trainY.shape 
(300, 10) 

Question1 देगी बाद

Window = 20 
Horizon = 10 

|   trainX     |   trainY    | 
| [Yt-10, Yt-11, Yt-12,...,Yt-29] | [Yt, Yt-1, Yt-2,...,Yt-9] | 
| [Yt-11, Yt-12, Yt-13,...,Yt-30] | [Yt-2, Yt-3, Yt-4,...,Yt-10] | 
| [Yt-12, Yt-13, Yt-14,...,Yt-31] | [Yt-3, Yt-4, Yt-5,...,Yt-11] | 
... 

:: मैं इस तरह से मेरी trainX और trainY का निर्माण करेगी (कृपया मुझे ठीक कर लें मैं गलत हूँ) इस मामले में, [नमूने, समय कदम, विशेषताएं] = [300, 1, 20]। क्या यह सही है? या मुझे नमूना [300, 20, 1] के रूप में बनाना चाहिए?

प्रश्न 2: मैं कच्चे डेटा जैसे तापमान, स्टोरटाइप इत्यादि में अन्य जानकारी का उपयोग करना चाहता हूं। मुझे एलएसटीएम के लिए अपना इनपुट डेटा कैसे बनाना चाहिए?

प्रश्न 3: अभी तक हमने केवल 1 स्टोर पूर्वानुमान पर चर्चा की है, अगर मैं सभी दुकानों के लिए पूर्वानुमान करना चाहता हूं, तो मुझे अपना इनपुट डेटा कैसे बनाना चाहिए?

वर्तमान में मैं here से बह उदाहरण हूँ, लेकिन यह परिदृश्य मेरे पास है को कवर करने के लिए पर्याप्त नहीं लगता है। मैं आपकी मदद के लिए वास्तव में सराहना करता हूं!

+0

मैं इस समय एक ही मुद्दे के साथ संघर्ष कर रहा हूं, अगर आपको इसके बारे में और जानकारी मिलती है, तो धन्यवाद चेन-) – joe

उत्तर

10

मैं हाल ही में समान समस्या को हल करने गया था। आपके मामले में:

  1. इनपुट आकार (300, 20, 1) होना चाहिए - क्योंकि तुम 1 सुविधा के साथ लंबाई 20 के उन समय अनुक्रमों की है।

  2. आप इस तरह यह कर सकता है:

    sequential_input = Input(shape=(20, 1)) 
    feature_input = Input(shape=(feature_nb,)) 
    lstm_layer = LSTM(lstm_units_1st_layer, return_sequences=True)(sequential_input) 
    lstm_layer = LSTM(lstm_units_2nd_layer, return_sequences=True)(lstm_layer) 
    ... 
    lstm_layer = LSTM(lstm_units_nth_layer, return_sequences=False)(lstm_layer) 
    merged = merge([lstm_layer, feature_input], mode='concat') 
    blend = Dense(blending_units_1st_layer, activation='relu')(merged) 
    blend = Dense(blending_units_2nd_layer, activation='relu')(blend) 
    ... 
    output = Dense(10)(blend) 
    
  3. यह सबसे कठिन हिस्सा है। मैं सलाह आप उन्हें एक फीचर वेक्टर के रूप में एक नेटवर्क से खिला द्वारा कई दुकानों भविष्यवाणी करने के लिए नहीं है । आप बस इस भाग को छोड़ सकते हैं और उदाहरण के लिए एक मॉडल या पोस्टप्रोसेस आउटपुट का उपयोग करके विभिन्न दुकानों की भविष्यवाणी करने का प्रयास कर सकते हैं। मैट्रिक्स पर कुछ प्रकार के ग्राफिकल मॉडल या PCA जहां पंक्तियां दिन की बिक्री होती हैं।

अद्यतन:

एकाधिक अनुक्रमिक सुविधाओं आप निम्नलिखित बात कर सकता है के साथ सौदा करने के लिए:

sequential_input = Input(shape=(20, nb_of_sequental_features)) 
    feature_input = Input(shape=(feature_nb,)) 
    lstm_layer = LSTM(lstm_units_1st_layer, return_sequences=True)(sequential_input) 
    lstm_layer = LSTM(lstm_units_2nd_layer, return_sequences=True)(lstm_layer) 
    ... 
    lstm_layer = LSTM(lstm_units_nth_layer, return_sequences=False)(lstm_layer) 
    merged = merge([lstm_layer, feature_input], mode='concat') 
    blend = Dense(blending_units_1st_layer, activation='relu')(merged) 
    blend = Dense(blending_units_2nd_layer, activation='relu')(blend) 
    ... 
    output = Dense(10)(blend) 
    model = Model(input=[sequential_input, feature_input], output=output]) 

इस मामले आपके इनपुट दो तालिकाओं की सूची से मिलकर करना चाहिए: [sequential_data, features] जहां sequential_data.shape = (nb_of_examples, timesteps, sequential_features) और features.shape = (nb_of_examples, feature_nb)। तो sales या temperature को sequential_features और store_type में features में संग्रहीत किया जाना चाहिए।

+0

उत्तर के लिए बहुत बहुत धन्यवाद! # 1 के लिए, मैंने विकल्प (300, 20, 1) के साथ विकल्प की कोशिश की और सटीकता पहले बहुत बेहतर है! (हालांकि बहुत धीमी है) # 2 के लिए, मैं अभी भी जवाब के बारे में बहुत उलझन में हूं। क्या हम एक फीचर परत के साथ एक एलएसटीएम परत विलय कर रहे हैं? फीचर परत एक और एलएसटीएम परत है? या आप सुझाव दे रहे हैं कि हमें प्रत्येक एक्स को एक अलग अनुक्रम के रूप में मानना ​​चाहिए और प्रत्येक एक्स sequesnce के लिए एक एलएसटीएम बनाना चाहिए? और एन = 3? अंत में हमें कई घने परत की आवश्यकता क्यों है? यदि आप तर्क की व्याख्या कर सकते हैं, तो यह बहुत अच्छा होगा! वास्तव में फिर से सराहना करते हैं !!! –

+0

ठीक है। मुझे अंततः समझ में आया - मौसम की जानकारी भी अनुक्रमिक है, हां (आपके पास मौसम का अनुक्रम है - है ना?) –

+1

हां। 'तापमान' कॉलम एक समय आधारित अनुक्रम है। 'ओपन' और 'स्टोर टाइप' कॉलम स्टोर की स्थिति की स्पष्ट विशेषता की तरह अधिक हैं। मुझे लगता है कि मुझे अभी भी यकीन नहीं है कि मैं एलएसटीएम मॉडल में इन अतिरिक्त सुविधाओं को कैसे जोड़ूं। मेरा अनुमान है कि हम 3 डी टेंसर [नमूने, समय चरणों, विशेषताओं] में सुविधाओं को जोड़ सकते हैं, या विभिन्न अनुक्रम के लिए एकाधिक परत बना सकते हैं और उन्हें एक साथ विलय कर सकते हैं? –

संबंधित मुद्दे