<jupyter_start><jupyter_text>**Dummy model** - zanim zaczniemy robić bardziej zaawansowane rzeczy, to chcemy odpalić najprostszy możliwy model.<jupyter_code>df.select_dtypes(np.number).columns
#tu sprawdzamy, które kolumny mają typ number (int albo float) - dzięki temu możemy je szybko wziąć do prostego modelu.
feats = ['car_id']
X = df[feats].values #lista przekazywanych cech (ta wyżej)
y = df['price_value'].values

model = DummyRegressor() #tu tworzymy nowy model
model.fit(X,y) #w tym miejscu zaczyna się trenować - ten zawsze zwraca wartość średnią
y_pred = model.predict(X) #tu robimy prognozowanie, chcemy uzyskać punkt odniesienia

mae(y, y_pred) #to mierzy nam jakość - mae to jest średnia wartość błędu od ceny dobrze zaprognozowanej od realnej
[x for x in df.columns if 'price' in x]
df['price_currency'].value_counts(normalize=True)*100
#widzimy, że 0,19% cen jest w euro
df['price_currency'].value_counts()
df = df[df['price_currency'] != 'EUR']
df.shape
#jest mało w euro więc usuwamy wszystko z euro iu zobaczymy ile nam zostaje<jupyter_output><empty_output><jupyter_text>**Feature engineering - przygotowywanie danych**<jupyter_code>df.head(2)
for feat in df.columns:
  print(feat)

#iterujemy po kolumnach i wyciągamy nagłówki
cos = df['param_color'].factorize()[0]

#każdy kolor przypisujemy do liczby i tworzymy dla nich ID - bo model obsługuje tylko liczby
SUFFIX_CAT = '__cat'
for feat in df.columns:
  if isinstance(df[feat][0], list): continue
  
  factorized_values = df[feat].factorize()[0]
  if SUFFIX_CAT in feat:
    df[feat] = factorized_values
  else:
    df[feat + SUFFIX_CAT] = factorized_values
cat_feats = [x for x in df.columns if SUFFIX_CAT in x]
len(cat_feats)
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]
cat_feats
len(cat_feats)
X = df[cat_feats].values
y = df['price_value'].values
model = DecisionTreeRegressor(max_depth=5)
scores = cross_val_score(model, X, y, cv=3, scoring='neg_mean_absolute_error')
np.mean(scores)
#neg mean żeby wyniki były w wartości ujemnej - staramy się dojść do 0
#bierzemy wszystko z kolumn i idikujemy, wynik jest znacznie lepszy niż był!
m = DecisionTreeRegressor(max_depth=5)
m.fit(X,y)

imp = PermutationImportance(m, random_state=0).fit(X,y)
eli5.show_weights(imp, feature_names=cat_feats)

#cechy, które mają największy wpływ na cenę
def group_and_barplot(feat_groupby, feat_agg='price_value', feat_funcs=[np.mean, np.median, np.size], feat_sort='mean', top=50, subplots=True):
  return (
    df
      .groupby(feat_groupby)[feat_agg]
      .agg(feat_funcs)
      .sort_values(by=feat_sort, ascending = False)
      .head(top)
).plot(kind='bar', figsize=(15,5), subplots=subplots)
group_and_barplot('param_napęd',feat_sort='mean');<jupyter_output><empty_output>
{'fraction_non_alphanumeric': 0.10952550838387443, 'fraction_numerical': 0.007491972886193364, 'mean_word_length': 5.756626506024096, 'pattern_counts': {'":': 0, '<': 9, '<?xml version=': 0, '>': 9, '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': '2', 'dir': 'jupyter-structured-clean-dedup', 'id': '615588', 'license': 'MIT', 'n_tokens_mistral': 1150, 'n_tokens_neox': 1140, 'n_words': 286, 'path': 'day3_simple_model@dominikblaszczykiewicz.ipynb', 'repo_name': 'magitk/dw_matrix_car', 'size': '2803'}