<jupyter_start><jupyter_text>Wczytywanie danych<jupyter_code>cd 'drive/My Drive/Colab Notebooks/matrix/matrix_two/dw_matrix_car'

df = pd.read_hdf('data/car.h5')
df.shape
df.columns<jupyter_output><empty_output><jupyter_text>Dummy modelSprawdzamy wynik na najprostszym modelu. Najpierw sprawdzamy, które kolumny zawierają wartości numeryczne.<jupyter_code>df.select_dtypes(np.number).columns #Najpierw sprawdzamy, które kolumny zawierają wartości numeryczne.
feats = ['car_id']
X = df[feats].values
y = df['price_value'].values

model = DummyRegressor()
model.fit(X, y)
y_pred = model.predict(X)

mae(y, y_pred)
[x for x in df.columns if 'price' in x]# sprawdzenie, które kolumny mają price w nazwie
df['price_currency'].value_counts()<jupyter_output><empty_output><jupyter_text>Mamy 204 wartości w euro. Powinniśmy je znormalizować, przeeliczyć na PLN zgodnie z obowiązującym kursem euro, ale wartości tych jest 0,19% więc nie powinny znacznie wpłynąć na model. Usuwamy wszystkie ogłoszenia z euro.<jupyter_code>df = df[ df['price_currency'] != 'EUR']
df.shape<jupyter_output><empty_output><jupyter_text>FuturesPrzygotowanie cech<jupyter_code>df.head()
for feat in df.columns:

  print(feat)
df['param_color'].factorize()
df['param_color'].factorize()[0]

SUFFIX_CAT = '__cat' #oznaczamy zmienne kategorialne
for feat in df.columns:
  if isinstance (df[feat][0], list): continue #jeżeli wartość jest listą to nic nie rób, bez tego funkcja zgłasza błąd
  
  factorized_values = df[feat].factorize()[0]
  if SUFFIX_CAT in feat: #jeżeli nazwa kolumny zawiera już __cat
    df[feat] = factorized_values #przypisz tę samą wartość
  else: 
    df[feat+SUFFIX_CAT] = factorized_values # w przeciwnym przypadku dodaj __cat

cat_feats = [x for x in df.columns if SUFFIX_CAT in x]
cat_feats = [x for x in cat_feats if 'price' not in x] # odrzucamy zmienne, które mają 'price' w nazwie, gdyż są to zmienne docelowe, któe będą prognozowane
len(cat_feats) #mamy 151 zmiennych, na których model będzie się uczył
X = df[cat_feats].values
y = df['price_value'].values

model = DecisionTreeRegressor (max_depth=5)
scores = cross_val_score(model, X, y, scoring = 'neg_mean_absolute_error')
np.mean(scores)
m = DecisionTreeRegressor(max_depth=5)  #Tworzymy nowy model, żeby poznać ważność cech
m.fit(X, y)

imp = PermutationImportance(m, random_state=0).fit(X, y)
eli5.show_weights (imp, feature_names=cat_feats)<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.10396039603960396, 'fraction_numerical': 0.007013201320132013, 'mean_word_length': 6.415902140672783, 'pattern_counts': {'":': 0, '<': 17, '<?xml version=': 0, '>': 17, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'chain_length': '4', 'dir': 'jupyter-structured-clean-dedup', 'id': '160811', 'license': 'MIT', 'n_tokens_mistral': 994, 'n_tokens_neox': 996, 'n_words': 234, 'path': 'day3_simple_model.ipynb', 'repo_name': 'Agnesing/dw_matrix_car', 'size': '2424'}