У меня есть ниже набор данных в файле 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
.
Что я здесь не так делаю?