scikit-learn - модель прогнозирования возвращает «неправильное» предсказание - PullRequest
0 голосов
/ 12 февраля 2020

У меня есть ниже набор данных в файле CSV с именем shipments.csv. В файле> 8 тыс. Строк:

| Consignor Code | Consignee Code | Origin | Destination | Carrier Code | 
|----------------|----------------|--------|-------------|--------------| 
| 6403623194     | 6405167792     | DKCPH  | AUMEL       | 6402746389   | 
| 6403623194     | 6403823770     | DKBLL  | CNTSN       | 6402746354   | 
| 6403623194     | 6403823770     | DKBLL  | CNTSN       | 6402746354   | 
| 6403623194     | 6402546085     | DKBLL  | USDEN       | 6402746424   | 
| 6403623194     | 6402546085     | DKBLL  | USDEN       | 6402746424   | 
...

Я пытаюсь создать простую модель, в которой я могу предсказать Destination на основе Consignee Code.

. Я создал следующий код:

#Load the dataset and remove unwanted columns and NaN values.
dataset = pd.read_csv('shipments_non_empty.csv', header=0, skip_blank_lines=True)
dataset.drop(columns=['Consignor Code','Carrier Code', 'Origin'], inplace=True)
dataset.dropna(subset=['Consignee Code', 'Destination'], inplace=True)

#Treat the Consignee Code as a string
dataset['Consignee Code'] = dataset['Consignee Code'].astype('int64')

#Define our target (what we want to predict) - and remove it from the 
target = dataset.pop('Destination')

#Convert all our data to numeric values, so we can use the .fit function.
#For that, we use LabelEncoder
le_consignee = preprocessing.LabelEncoder()
le_target = preprocessing.LabelEncoder()
target = le_target.fit_transform(list(target))
dataset['Consignee Code'] = le_consignee.fit_transform(
    list(dataset['Consignee Code']))

# Prepare the dataset.
X_train, X_test, y_train, y_test = train_test_split(
    dataset, target, test_size=0.30, random_state=42)

На данный момент мой набор данных (поезд / тест) готов. Затем я перехожу к модели и прогнозирую новый вход:

# Prepare the model and .fit it.
model = RandomForestClassifier()
model.fit(X_train, y_train)

# Make a prediction on the test set.
predictions = model.predict(X_test)

# Print the accuracy score.
print("The accuracy score of the predicted output is: {}".format(
    accuracy_score(y_test, predictions)))

#Test on a new input.
new_input = ["6402546085"]
fitted_new_input = np.array([le_consignee.transform([new_input[0]])[0]])
new_predictions = model.predict(fitted_new_input.reshape(1, -1))

print(le_target.inverse_transform(new_predictions))

Приведенный выше код будет распечатан ниже:

The accuracy score of the predicted output is: 0.7233265720081136
['SAJED']

Как вы можете видеть, он предсказывает пункт назначения как "САЖЕД". Я нахожу это очень странным, так как нет моего набора данных, где Consignee Code равен 6402546085, является пунктом назначения SAJED.

Что я здесь не так делаю?

...