BitBullet:Lessons: Multi-Class Classification¶
Agricultural research, quality control, and supply chain optimisation all depend on accurately identifying biological varieties from measurable features. In this tutorial we build a dry bean variety classifier — a model that predicts which of seven bean species a sample belongs to based on morphological measurements extracted from digital images.
This is a real-world problem from the UCI Machine Learning Repository: a computer vision pipeline images each bean, extracts 16 shape and texture measurements, and your model determines the variety. With seven classes ranging from the dominant DERMASON (26%) to the rare BOMBAY (4%), this dataset tests everything BitBullet's multiclass handling can do.
Dataset: Dry_Bean_Dataset.xlsx — 13,611 bean samples, 16 morphological features.
Source: UCI ML Repository — Dry Bean Dataset
Task: Predict bean variety (DERMASON / SIRA / SEKER / HOROZ / CALI / BARBUNYA / BOMBAY) from shape features.
What You Will Build¶
| Step | Component | What BitBullet Handles For You |
|---|---|---|
| 1 | Feature profiling | generate_feature_stats — full audit in one call |
| 2 | Class imbalance analysis | Visual distribution across all seven varieties |
| 3 | Hold-out test split | Stratified 80/20 — all seven class proportions preserved |
| 4 | Target encoding | LabelEncoder — integer codes for the trainer, decoded labels for humans |
| 5 | Transform pipeline | Fit on train only, serialise, reload, apply to test — zero leakage |
| 6 | Hyperparameter search | Optuna TPE + Stratified K-Fold + early stopping, softmax objective |
| 7 | Confusion matrix | Which varieties are confused with which — the full 7×7 picture |
| 8 | Per-class metrics | Precision, recall, F1 for every variety separately |
| 9 | Per-class ROC AUC | One-vs-rest decomposition |
| 10 | SHAP explainability | Global feature attributions — which shape measurements matter most |
| 11 | Model serialisation | ModelSerializer + ModelMetadata — provenance, class label mapping, schema, preprocessing, and structured metric payloads |
1. Environment & Imports¶
import sys
import os
import warnings
from datetime import datetime
import pandas as pd
import numpy as np
import matplotlib.pyplot as plt
import seaborn as sns
from sklearn.model_selection import train_test_split
from sklearn.preprocessing import LabelEncoder, label_binarize
from sklearn.metrics import (
classification_report,
confusion_matrix,
roc_auc_score,
accuracy_score,
balanced_accuracy_score,
f1_score,
)
warnings.filterwarnings('ignore')
# When running this notebook from bitbullet/lessons in a local clone, prefer the local SDK source.
sdk_root = os.path.abspath("..")
if sdk_root not in sys.path:
sys.path.insert(0, sdk_root)
import bitbullet
print(f"bitbullet : v{getattr(bitbullet, '__version__', 'dev')}")
from bitbullet.transform import TransformPipeline
from bitbullet.transform.eda import generate_feature_stats
from bitbullet.train import TrainConfig, OptunaTrainer, TrainingReportGenerator
from bitbullet.model import ModelMetadata, ModelSerializer
print("All imports successful.")
bitbullet : vdev All imports successful.
2. Load the Dataset¶
Each row represents a single dry bean sample imaged under controlled conditions. The 16 features are morphological measurements — area, perimeter, axis lengths, eccentricity, convex hull statistics, and shape factors — computed automatically from the digital image. The target Class is the true bean variety assigned by agricultural experts.
Dataset: Dry Bean Dataset
Source: UCI ML Repository — Dry Bean Dataset
File: Dry_Bean_Dataset.xlsx
Before running this cell: download
Dry_Bean_Dataset.xlsxfrom the link above and place it in the same directory as this notebook. If you store it elsewhere, updatedata_pathin the code cell below to match your chosen location.
# Update this path if you stored the file in a different location.
data_path = "Dry_Bean_Dataset.xlsx"
df = pd.read_excel(data_path)
print(f"Dataset loaded — Shape: {df.shape}")
target_col = 'Class'
X = df.drop(columns=[target_col])
y = df[target_col]
print(f"Features : {X.shape[1]}")
print(f"Target : {y.value_counts().to_dict()}")
display(df.head())
Dataset loaded — Shape: (13611, 17)
Features : 16
Target : {'DERMASON': 3546, 'SIRA': 2636, 'SEKER': 2027, 'HOROZ': 1928, 'CALI': 1630, 'BARBUNYA': 1322, 'BOMBAY': 522}
| Area | Perimeter | MajorAxisLength | MinorAxisLength | AspectRation | Eccentricity | ConvexArea | EquivDiameter | Extent | Solidity | roundness | Compactness | ShapeFactor1 | ShapeFactor2 | ShapeFactor3 | ShapeFactor4 | Class | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 0 | 28395 | 610.291 | 208.178117 | 173.888747 | 1.197191 | 0.549812 | 28715 | 190.141097 | 0.763923 | 0.988856 | 0.958027 | 0.913358 | 0.007332 | 0.003147 | 0.834222 | 0.998724 | SEKER |
| 1 | 28734 | 638.018 | 200.524796 | 182.734419 | 1.097356 | 0.411785 | 29172 | 191.272750 | 0.783968 | 0.984986 | 0.887034 | 0.953861 | 0.006979 | 0.003564 | 0.909851 | 0.998430 | SEKER |
| 2 | 29380 | 624.110 | 212.826130 | 175.931143 | 1.209713 | 0.562727 | 29690 | 193.410904 | 0.778113 | 0.989559 | 0.947849 | 0.908774 | 0.007244 | 0.003048 | 0.825871 | 0.999066 | SEKER |
| 3 | 30008 | 645.884 | 210.557999 | 182.516516 | 1.153638 | 0.498616 | 30724 | 195.467062 | 0.782681 | 0.976696 | 0.903936 | 0.928329 | 0.007017 | 0.003215 | 0.861794 | 0.994199 | SEKER |
| 4 | 30140 | 620.134 | 201.847882 | 190.279279 | 1.060798 | 0.333680 | 30417 | 195.896503 | 0.773098 | 0.990893 | 0.984877 | 0.970516 | 0.006697 | 0.003665 | 0.941900 | 0.999166 | SEKER |
print("Column names and dtypes:")
print(df.dtypes.to_string())
print(f"\nMissing values across all columns: {df.isnull().sum().sum()}")
print("\nAll features are numerical — no categorical encoding required.")
Column names and dtypes: Area int64 Perimeter float64 MajorAxisLength float64 MinorAxisLength float64 AspectRation float64 Eccentricity float64 ConvexArea int64 EquivDiameter float64 Extent float64 Solidity float64 roundness float64 Compactness float64 ShapeFactor1 float64 ShapeFactor2 float64 ShapeFactor3 float64 ShapeFactor4 float64 Class object Missing values across all columns: 0 All features are numerical — no categorical encoding required.
3. Understanding Multi-Class Imbalance¶
Seven classes with very different prevalences create a challenging prediction problem. DERMASON accounts for 26% of samples; BOMBAY accounts for fewer than 4%. A naive majority-class baseline achieves only 26% accuracy — but a model that ignores BOMBAY samples will still appear to perform well on aggregate metrics. We use stratified splitting and balanced accuracy to guard against this.
BEAN_ORDER = ['DERMASON', 'SIRA', 'SEKER', 'HOROZ', 'CALI', 'BARBUNYA', 'BOMBAY']
BEAN_COLORS = {
'DERMASON' : '#2563EB',
'SIRA' : '#10B981',
'SEKER' : '#F59E0B',
'HOROZ' : '#8B5CF6',
'CALI' : '#EF4444',
'BARBUNYA' : '#EC4899',
'BOMBAY' : '#6B7280',
}
bean_counts = y.value_counts().reindex(BEAN_ORDER)
bean_pct = (bean_counts / len(y) * 100).round(1)
print("Class distribution:")
for bean, count, pct in zip(BEAN_ORDER, bean_counts, bean_pct):
bar = '\u2588' * int(pct / 1.5)
print(f" {bean:<10} {count:>5,} ({pct:>5.1f}%) {bar}")
fig, axes = plt.subplots(1, 2, figsize=(13, 4))
fig.suptitle("Dry Bean Class Distribution — 13,611 Samples", fontsize=13, fontweight="bold")
ax = axes[0]
bars = ax.bar(
BEAN_ORDER, bean_counts.values,
color=[BEAN_COLORS[b] for b in BEAN_ORDER],
edgecolor='#555555', linewidth=0.8
)
ax.set_title("Sample Count per Variety", fontweight="bold")
ax.set_ylabel("Count")
ax.set_xlabel("Bean Variety")
ax.tick_params(axis='x', rotation=30)
for bar, count in zip(bars, bean_counts.values):
ax.text(bar.get_x() + bar.get_width() / 2, bar.get_height() + 20,
f"{count:,}", ha='center', va='bottom', fontsize=8)
ax.grid(axis='y', alpha=0.3)
ax = axes[1]
wedges, texts, autotexts = ax.pie(
bean_counts.values,
labels=BEAN_ORDER,
colors=[BEAN_COLORS[b] for b in BEAN_ORDER],
autopct='%1.1f%%', startangle=90,
wedgeprops=dict(edgecolor='#555555', linewidth=0.8)
)
for at in autotexts:
at.set_fontsize(8)
ax.set_title("Proportion per Variety", fontweight="bold")
plt.tight_layout()
plt.show()
majority_acc = bean_counts.max() / len(y)
print(f"\nMajority-class baseline accuracy : {majority_acc:.1%} (always predicting DERMASON)")
Class distribution: DERMASON 3,546 ( 26.1%) █████████████████ SIRA 2,636 ( 19.4%) ████████████ SEKER 2,027 ( 14.9%) █████████ HOROZ 1,928 ( 14.2%) █████████ CALI 1,630 ( 12.0%) ████████ BARBUNYA 1,322 ( 9.7%) ██████ BOMBAY 522 ( 3.8%) ██
Majority-class baseline accuracy : 26.1% (always predicting DERMASON)
4. Exploratory Feature Analysis¶
generate_feature_stats audits every feature column. All 16 features here are continuous numerical measurements — area in pixels, lengths in pixels, ratios and shape coefficients — which simplifies the preprocessing decision: we need scaling, not encoding.
stats_df, numerical_cols, categorical_cols = generate_feature_stats(X)
print(f"Numerical ({len(numerical_cols)}): {numerical_cols}")
print(f"Categorical ({len(categorical_cols)}): {categorical_cols}")
print("-" * 60)
display(stats_df)
Numerical (16): ['Area', 'Perimeter', 'MajorAxisLength', 'MinorAxisLength', 'AspectRation', 'Eccentricity', 'ConvexArea', 'EquivDiameter', 'Extent', 'Solidity', 'roundness', 'Compactness', 'ShapeFactor1', 'ShapeFactor2', 'ShapeFactor3', 'ShapeFactor4'] Categorical (0): [] ------------------------------------------------------------
| dtype | missing_count | missing_percent | unique_values | zero_count | negative_count | mean | std | skewness | kurtosis | mean_percentile | min | 25% | 50% | 75% | max | |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Area | int64 | 0 | 0.0 | 12011 | 0 | 0 | 53048.284549 | 29324.095717 | 2.952931 | 10.800814 | 66.497686 | 20420.000000 | 36328.000000 | 44652.000000 | 61332.000000 | 254616.000000 |
| Perimeter | float64 | 0 | 0.0 | 13416 | 0 | 0 | 855.283459 | 214.289696 | 1.626124 | 3.588123 | 60.737639 | 524.736000 | 703.523500 | 794.941000 | 977.213000 | 1985.370000 |
| MajorAxisLength | float64 | 0 | 0.0 | 13543 | 0 | 0 | 320.141867 | 85.694186 | 1.357815 | 2.531902 | 58.695173 | 183.601165 | 253.303633 | 296.883367 | 376.495012 | 738.860153 |
| MinorAxisLength | float64 | 0 | 0.0 | 13543 | 0 | 0 | 202.270714 | 44.970091 | 2.238211 | 6.651067 | 64.998898 | 122.512653 | 175.848170 | 192.431733 | 217.031741 | 460.198497 |
| AspectRation | float64 | 0 | 0.0 | 13543 | 0 | 0 | 1.583242 | 0.246678 | 0.582573 | 0.113814 | 56.432297 | 1.024868 | 1.432307 | 1.551124 | 1.707109 | 2.430306 |
| Eccentricity | float64 | 0 | 0.0 | 13543 | 0 | 0 | 0.750895 | 0.092002 | -1.062824 | 1.387456 | 41.716259 | 0.218951 | 0.715928 | 0.764441 | 0.810466 | 0.911423 |
| ConvexArea | int64 | 0 | 0.0 | 12066 | 0 | 0 | 53768.200206 | 29774.915817 | 2.941821 | 10.743640 | 66.409522 | 20684.000000 | 36714.500000 | 45178.000000 | 62294.000000 | 263261.000000 |
| EquivDiameter | float64 | 0 | 0.0 | 12011 | 0 | 0 | 253.064220 | 59.177120 | 1.948958 | 5.192057 | 62.302549 | 161.243764 | 215.068003 | 238.438026 | 279.446467 | 569.374358 |
| Extent | float64 | 0 | 0.0 | 13535 | 0 | 0 | 0.749733 | 0.049086 | -0.895348 | 0.643319 | 43.060760 | 0.555315 | 0.718634 | 0.759859 | 0.786851 | 0.866195 |
| Solidity | float64 | 0 | 0.0 | 13526 | 0 | 0 | 0.987143 | 0.004660 | -2.550093 | 12.799621 | 36.536625 | 0.919246 | 0.985670 | 0.988283 | 0.990013 | 0.994677 |
| roundness | float64 | 0 | 0.0 | 13543 | 0 | 0 | 0.873282 | 0.059520 | -0.635749 | 0.374306 | 43.942400 | 0.489618 | 0.832096 | 0.883157 | 0.916869 | 0.990685 |
| Compactness | float64 | 0 | 0.0 | 13543 | 0 | 0 | 0.799864 | 0.061713 | 0.037115 | -0.223459 | 48.886930 | 0.640577 | 0.762469 | 0.801277 | 0.834270 | 0.987303 |
| ShapeFactor1 | float64 | 0 | 0.0 | 13543 | 0 | 0 | 0.006564 | 0.001128 | -0.534141 | 0.714355 | 45.720373 | 0.002778 | 0.005900 | 0.006645 | 0.007271 | 0.010451 |
| ShapeFactor2 | float64 | 0 | 0.0 | 13543 | 0 | 0 | 0.001716 | 0.000596 | 0.301226 | -0.859254 | 51.186540 | 0.000564 | 0.001154 | 0.001694 | 0.002170 | 0.003665 |
| ShapeFactor3 | float64 | 0 | 0.0 | 13543 | 0 | 0 | 0.643590 | 0.098996 | 0.242481 | -0.144475 | 50.811843 | 0.410339 | 0.581359 | 0.642044 | 0.696006 | 0.974767 |
| ShapeFactor4 | float64 | 0 | 0.0 | 13543 | 0 | 0 | 0.995063 | 0.004366 | -2.759483 | 13.038067 | 35.265594 | 0.947687 | 0.993703 | 0.996386 | 0.997883 | 0.999733 |
5. The Golden Rule: Split Before You Transform¶
Fitting scalers on the full dataset leaks test-set statistics into training — an artificially lower training loss that does not generalise. We split first, then fit all transforms exclusively on X_train.
le = LabelEncoder()
le.fit(y)
print(f"Class encoding: {dict(zip(le.classes_, le.transform(le.classes_)))}")
X_train, X_test, y_train, y_test = train_test_split(
X, y, test_size=0.20, random_state=42, stratify=y
)
y_train_encoded = le.transform(y_train)
y_test_encoded = le.transform(y_test)
print(f"\nTraining : {X_train.shape[0]:,} samples")
print(f"Test : {X_test.shape[0]:,} samples")
print("\nClass proportions preserved across splits:")
train_dist = pd.Series(y_train).value_counts(normalize=True).reindex(BEAN_ORDER)
test_dist = pd.Series(y_test).value_counts(normalize=True).reindex(BEAN_ORDER)
display(pd.DataFrame({'Train %': (train_dist * 100).round(1), 'Test %': (test_dist * 100).round(1)}))
Class encoding: {'BARBUNYA': np.int64(0), 'BOMBAY': np.int64(1), 'CALI': np.int64(2), 'DERMASON': np.int64(3), 'HOROZ': np.int64(4), 'SEKER': np.int64(5), 'SIRA': np.int64(6)}
Training : 10,888 samples
Test : 2,723 samples
Class proportions preserved across splits:
| Train % | Test % | |
|---|---|---|
| Class | ||
| DERMASON | 26.1 | 26.0 |
| SIRA | 19.4 | 19.4 |
| SEKER | 14.9 | 14.9 |
| HOROZ | 14.2 | 14.2 |
| CALI | 12.0 | 12.0 |
| BARBUNYA | 9.7 | 9.7 |
| BOMBAY | 3.8 | 3.8 |
6. Feature Engineering with TransformPipeline¶
All 16 features are numerical morphological measurements. Several (Area, Perimeter, ConvexArea, EquivDiameter) span large absolute ranges — standard scaling brings them onto a common scale so the Optuna search isn't biased by feature magnitude differences. Shape factors and ratios (Eccentricity, Solidity, Compactness) are already bounded to [0, 1] but scaling them consistently with the rest of the pipeline is still best practice.
pipeline = TransformPipeline(name="dry_bean_preprocessing")
pipeline.add(
transformer_type="numerical",
method="standard_scale",
columns=numerical_cols
)
print(pipeline)
print(f"\nSteps: {len(pipeline)}")
for step in pipeline.list_steps():
print(f" [{step['type']:12s}] {step['method']:20s} \u2192 {len(step['columns'])} columns")
TransformPipeline(name='dry_bean_preprocessing', steps=1, status=not fitted) Steps: 1 [numerical ] standard_scale → 16 columns
X_train_transformed = pipeline.fit_transform(X_train)
print(f"Training features : {X_train.shape[1]} raw \u2192 {X_train_transformed.shape[1]} post-transform")
print(f"Training samples : {X_train_transformed.shape[0]:,}")
print(f"Pipeline fitted : {pipeline.is_fitted}")
Training features : 16 raw → 16 post-transform Training samples : 10,888 Pipeline fitted : True
6.1 Serialise, Reload, and Apply to Test¶
pipeline_path = "pipeline_dry_bean.pkl"
pipeline.save(pipeline_path)
print(f"Pipeline serialised \u2192 {pipeline_path}")
loaded_pipeline = TransformPipeline.load(pipeline_path)
print(f"Pipeline reloaded — fitted: {loaded_pipeline.is_fitted} | steps: {len(loaded_pipeline)}")
X_test_transformed = loaded_pipeline.transform(X_test)
print(f"\nTest set : {X_test.shape} \u2192 {X_test_transformed.shape}")
print(f"Column alignment: {list(X_train_transformed.columns) == list(X_test_transformed.columns)}")
Pipeline serialised → pipeline_dry_bean.pkl Pipeline reloaded — fitted: True | steps: 1 Test set : (2723, 16) → (2723, 16) Column alignment: True
7. Model Training¶
task="multiclass_classification" is the only configuration change from a binary setup. BitBullet selects the softmax objective, sets num_class=7, and uses macro OvR ROC AUC for CV scoring automatically.
config = TrainConfig(
name="dry_bean_lgbm",
model_type="lgbm",
task="multiclass_classification",
optimization_metric="roc_auc",
optuna_sampler="tpe",
n_trials=50,
cv_folds=5,
optimize_threshold=False,
save_feature_importance=True,
generate_shap=True,
shap_n_samples=500,
shap_n_background=100,
verbose=True,
optuna_show_progress=False,
random_state=42
)
trainer = OptunaTrainer(config=config)
trainer.fit(X_train_transformed, y_train_encoded)
state = trainer.state
[I 2026-05-05 19:30:55,838] A new study created in memory with name: dry_bean_lgbm
======================================================================
BitBullet Train - dry_bean_lgbm
======================================================================
Training samples: 10888
Features: 16
Class distribution: {3: 2837, 6: 2109, 5: 1621, 4: 1542, 2: 1304, 0: 1057, 1: 418}
Starting hyperparameter optimization (optuna)...
Trials: 50, CV Folds: 5
[I 2026-05-05 19:31:28,572] Trial 14 finished with value: 0.995310276978414 and parameters: {'num_leaves': 226, 'max_depth': 6, 'min_child_samples': 22, 'lambda_l1': 1.2216850427777404e-06, 'lambda_l2': 0.0010876504729103167, 'min_gain_to_split': 0.9747751133352428, 'feature_fraction': 0.6299670136520754, 'bagging_fraction': 0.8756671376675983, 'bagging_freq': 3, 'learning_rate': 0.1941119140046595, 'max_bin': 127}. Best is trial 14 with value: 0.995310276978414.
[I 2026-05-05 19:31:37,186] Trial 8 finished with value: 0.9953818643124024 and parameters: {'num_leaves': 272, 'max_depth': 6, 'min_child_samples': 99, 'lambda_l1': 1.871504203941811, 'lambda_l2': 0.9360771370400477, 'min_gain_to_split': 0.28316456072493756, 'feature_fraction': 0.9830631328426769, 'bagging_fraction': 0.8336729089723773, 'bagging_freq': 2, 'learning_rate': 0.21662223946853565, 'max_bin': 159}. Best is trial 8 with value: 0.9953818643124024.
[I 2026-05-05 19:31:53,954] Trial 3 finished with value: 0.9953734344613032 and parameters: {'num_leaves': 159, 'max_depth': 12, 'min_child_samples': 85, 'lambda_l1': 1.0919512215206316e-06, 'lambda_l2': 0.04153387470971465, 'min_gain_to_split': 0.6452881694106882, 'feature_fraction': 0.8229312148073686, 'bagging_fraction': 0.8360152405610404, 'bagging_freq': 7, 'learning_rate': 0.1228022691746178, 'max_bin': 191}. Best is trial 8 with value: 0.9953818643124024.
[I 2026-05-05 19:31:58,570] Trial 16 finished with value: 0.9948545150751364 and parameters: {'num_leaves': 190, 'max_depth': 7, 'min_child_samples': 9, 'lambda_l1': 0.0021313194206088394, 'lambda_l2': 0.0002874269935870234, 'min_gain_to_split': 0.8525614960734657, 'feature_fraction': 0.9170216913779051, 'bagging_fraction': 0.9450397546635948, 'bagging_freq': 5, 'learning_rate': 0.2862005631876366, 'max_bin': 191}. Best is trial 8 with value: 0.9953818643124024.
[I 2026-05-05 19:32:02,574] Trial 15 finished with value: 0.9951398657461912 and parameters: {'num_leaves': 77, 'max_depth': 6, 'min_child_samples': 12, 'lambda_l1': 1.7367689769838533e-07, 'lambda_l2': 8.910796233056972, 'min_gain_to_split': 0.26169215905309307, 'feature_fraction': 0.6708159328692289, 'bagging_fraction': 0.6879137533482832, 'bagging_freq': 6, 'learning_rate': 0.23003748594584889, 'max_bin': 255}. Best is trial 8 with value: 0.9953818643124024.
[I 2026-05-05 19:32:12,110] Trial 5 finished with value: 0.9956361287982063 and parameters: {'num_leaves': 127, 'max_depth': 3, 'min_child_samples': 5, 'lambda_l1': 8.123958352840565e-06, 'lambda_l2': 2.8535369367142184e-07, 'min_gain_to_split': 0.4556522046080762, 'feature_fraction': 0.6822762582029247, 'bagging_fraction': 0.9266798024551328, 'bagging_freq': 3, 'learning_rate': 0.05554330574588168, 'max_bin': 127}. Best is trial 5 with value: 0.9956361287982063.
[I 2026-05-05 19:32:16,860] Trial 11 finished with value: 0.9954258870794515 and parameters: {'num_leaves': 269, 'max_depth': 7, 'min_child_samples': 62, 'lambda_l1': 1.7623715062726464e-07, 'lambda_l2': 3.816916790295202e-06, 'min_gain_to_split': 0.3994373664746038, 'feature_fraction': 0.6261894368750877, 'bagging_fraction': 0.6516346847885612, 'bagging_freq': 1, 'learning_rate': 0.11502193511625303, 'max_bin': 223}. Best is trial 5 with value: 0.9956361287982063.
[I 2026-05-05 19:32:29,602] Trial 17 finished with value: 0.9952076336925344 and parameters: {'num_leaves': 280, 'max_depth': 9, 'min_child_samples': 19, 'lambda_l1': 2.47310047752173e-06, 'lambda_l2': 1.3032865346649805, 'min_gain_to_split': 0.605826026421758, 'feature_fraction': 0.6539251536694162, 'bagging_fraction': 0.6286154646910316, 'bagging_freq': 3, 'learning_rate': 0.2272222499239823, 'max_bin': 63}. Best is trial 5 with value: 0.9956361287982063.
[I 2026-05-05 19:32:30,377] Trial 0 finished with value: 0.9953139318202204 and parameters: {'num_leaves': 182, 'max_depth': 11, 'min_child_samples': 40, 'lambda_l1': 0.0006103267655106399, 'lambda_l2': 3.498651930754746e-05, 'min_gain_to_split': 0.343623957487574, 'feature_fraction': 0.7173300810515699, 'bagging_fraction': 0.9015053633887007, 'bagging_freq': 1, 'learning_rate': 0.10257266406482887, 'max_bin': 191}. Best is trial 5 with value: 0.9956361287982063.
[I 2026-05-05 19:32:33,717] Trial 2 finished with value: 0.9952585133575349 and parameters: {'num_leaves': 160, 'max_depth': 9, 'min_child_samples': 19, 'lambda_l1': 0.01136523740913846, 'lambda_l2': 0.017695911249944563, 'min_gain_to_split': 0.5348665691067385, 'feature_fraction': 0.8523110708754085, 'bagging_fraction': 0.6639276974504479, 'bagging_freq': 5, 'learning_rate': 0.08836663832621919, 'max_bin': 127}. Best is trial 5 with value: 0.9956361287982063.
[I 2026-05-05 19:32:55,614] Trial 1 finished with value: 0.9955870310031235 and parameters: {'num_leaves': 243, 'max_depth': 12, 'min_child_samples': 38, 'lambda_l1': 0.38392323942083634, 'lambda_l2': 0.0015021131212307544, 'min_gain_to_split': 0.640351888018897, 'feature_fraction': 0.6171314536249424, 'bagging_fraction': 0.8064233081954508, 'bagging_freq': 7, 'learning_rate': 0.055026066386206704, 'max_bin': 63}. Best is trial 5 with value: 0.9956361287982063.
[I 2026-05-05 19:33:06,495] Trial 21 finished with value: 0.9953370755502229 and parameters: {'num_leaves': 253, 'max_depth': 8, 'min_child_samples': 7, 'lambda_l1': 9.970061843021717e-08, 'lambda_l2': 0.037321252337759236, 'min_gain_to_split': 0.9812969784957366, 'feature_fraction': 0.852800587999297, 'bagging_fraction': 0.8604282459512955, 'bagging_freq': 3, 'learning_rate': 0.11576724844422992, 'max_bin': 255}. Best is trial 5 with value: 0.9956361287982063.
[I 2026-05-05 19:33:33,129] Trial 23 finished with value: 0.9953356542708924 and parameters: {'num_leaves': 252, 'max_depth': 6, 'min_child_samples': 18, 'lambda_l1': 1.6772476711376047e-05, 'lambda_l2': 2.668568740913787e-07, 'min_gain_to_split': 0.36356208676359403, 'feature_fraction': 0.9181548507546556, 'bagging_fraction': 0.7452366129375917, 'bagging_freq': 2, 'learning_rate': 0.15253202203429342, 'max_bin': 191}. Best is trial 5 with value: 0.9956361287982063.
[I 2026-05-05 19:33:40,539] Trial 19 finished with value: 0.9955104169905375 and parameters: {'num_leaves': 47, 'max_depth': 12, 'min_child_samples': 87, 'lambda_l1': 1.2626387164401162e-07, 'lambda_l2': 3.107357252858523e-08, 'min_gain_to_split': 0.5643898639661518, 'feature_fraction': 0.5021381705044634, 'bagging_fraction': 0.8740561567988078, 'bagging_freq': 1, 'learning_rate': 0.06762619373967828, 'max_bin': 63}. Best is trial 5 with value: 0.9956361287982063.
[I 2026-05-05 19:34:13,702] Trial 25 finished with value: 0.9955833398548126 and parameters: {'num_leaves': 90, 'max_depth': 3, 'min_child_samples': 5, 'lambda_l1': 0.005688963183156376, 'lambda_l2': 0.0003111689308915312, 'min_gain_to_split': 0.47013392736473386, 'feature_fraction': 0.6730078537052165, 'bagging_fraction': 0.9250136530050982, 'bagging_freq': 5, 'learning_rate': 0.03960811164214711, 'max_bin': 127}. Best is trial 5 with value: 0.9956361287982063.
[I 2026-05-05 19:34:42,138] Trial 13 finished with value: 0.9956555926591975 and parameters: {'num_leaves': 20, 'max_depth': 3, 'min_child_samples': 6, 'lambda_l1': 0.002516124230903166, 'lambda_l2': 0.3827011242967604, 'min_gain_to_split': 0.8206578991885104, 'feature_fraction': 0.8088061247982747, 'bagging_fraction': 0.7892724280696003, 'bagging_freq': 2, 'learning_rate': 0.014237658587585604, 'max_bin': 255}. Best is trial 13 with value: 0.9956555926591975.
[I 2026-05-05 19:34:56,350] Trial 27 finished with value: 0.9955277702655879 and parameters: {'num_leaves': 190, 'max_depth': 10, 'min_child_samples': 25, 'lambda_l1': 0.15129120305015978, 'lambda_l2': 4.142011223697147e-06, 'min_gain_to_split': 0.5355710079321002, 'feature_fraction': 0.6631207580537366, 'bagging_fraction': 0.8124986603030669, 'bagging_freq': 7, 'learning_rate': 0.06771183072897428, 'max_bin': 63}. Best is trial 13 with value: 0.9956555926591975.
[I 2026-05-05 19:35:12,147] Trial 18 finished with value: 0.9956685603663644 and parameters: {'num_leaves': 164, 'max_depth': 4, 'min_child_samples': 17, 'lambda_l1': 0.0005680384347629229, 'lambda_l2': 0.06257156333511303, 'min_gain_to_split': 0.6594220793024006, 'feature_fraction': 0.9708626504899072, 'bagging_fraction': 0.8296862031231932, 'bagging_freq': 5, 'learning_rate': 0.017329411323994393, 'max_bin': 95}. Best is trial 18 with value: 0.9956685603663644.
[I 2026-05-05 19:35:12,472] Trial 28 finished with value: 0.9954586626805673 and parameters: {'num_leaves': 244, 'max_depth': 12, 'min_child_samples': 51, 'lambda_l1': 0.30439558725401356, 'lambda_l2': 5.0160849798922706e-05, 'min_gain_to_split': 0.9002431745570263, 'feature_fraction': 0.5492128351180758, 'bagging_fraction': 0.6334373085907152, 'bagging_freq': 7, 'learning_rate': 0.05106811007830518, 'max_bin': 95}. Best is trial 18 with value: 0.9956685603663644.
[I 2026-05-05 19:35:17,258] Trial 26 finished with value: 0.9954967654610417 and parameters: {'num_leaves': 271, 'max_depth': 10, 'min_child_samples': 57, 'lambda_l1': 0.2656312980785257, 'lambda_l2': 8.544145509728189e-07, 'min_gain_to_split': 0.3769087808172218, 'feature_fraction': 0.5734899918373039, 'bagging_fraction': 0.7143542416552957, 'bagging_freq': 7, 'learning_rate': 0.05159302904304038, 'max_bin': 95}. Best is trial 18 with value: 0.9956685603663644.
[I 2026-05-05 19:35:48,704] Trial 7 finished with value: 0.9955074508689826 and parameters: {'num_leaves': 275, 'max_depth': 12, 'min_child_samples': 46, 'lambda_l1': 1.3595189100408551, 'lambda_l2': 0.38260513593057655, 'min_gain_to_split': 0.14396719307639927, 'feature_fraction': 0.8249454099067652, 'bagging_fraction': 0.5799206025599142, 'bagging_freq': 2, 'learning_rate': 0.0218168743142418, 'max_bin': 127}. Best is trial 18 with value: 0.9956685603663644.
[I 2026-05-05 19:36:10,639] Trial 32 finished with value: 0.9954469358190412 and parameters: {'num_leaves': 85, 'max_depth': 5, 'min_child_samples': 9, 'lambda_l1': 5.264654778577544e-06, 'lambda_l2': 2.82253584836318e-08, 'min_gain_to_split': 0.33879973330683716, 'feature_fraction': 0.5644775765248936, 'bagging_fraction': 0.7983503562144308, 'bagging_freq': 2, 'learning_rate': 0.10317802292536961, 'max_bin': 127}. Best is trial 18 with value: 0.9956685603663644.
[I 2026-05-05 19:36:15,841] Trial 6 finished with value: 0.995546994717435 and parameters: {'num_leaves': 146, 'max_depth': 9, 'min_child_samples': 35, 'lambda_l1': 0.00589570142711223, 'lambda_l2': 0.004902666014276008, 'min_gain_to_split': 0.3335612667225477, 'feature_fraction': 0.6468647062932555, 'bagging_fraction': 0.9423889466410409, 'bagging_freq': 3, 'learning_rate': 0.023619722711650387, 'max_bin': 223}. Best is trial 18 with value: 0.9956685603663644.
[I 2026-05-05 19:36:47,366] Trial 4 finished with value: 0.9956253437625413 and parameters: {'num_leaves': 42, 'max_depth': 3, 'min_child_samples': 16, 'lambda_l1': 0.13841416664805856, 'lambda_l2': 0.02157762035311752, 'min_gain_to_split': 0.9131397465846877, 'feature_fraction': 0.9623831630979394, 'bagging_fraction': 0.532879300496352, 'bagging_freq': 7, 'learning_rate': 0.006910974989570394, 'max_bin': 63}. Best is trial 18 with value: 0.9956685603663644.
[I 2026-05-05 19:37:09,806] Trial 30 finished with value: 0.9955327502126504 and parameters: {'num_leaves': 234, 'max_depth': 12, 'min_child_samples': 26, 'lambda_l1': 0.00018466739969569116, 'lambda_l2': 4.368623711979059e-05, 'min_gain_to_split': 0.7538064755055006, 'feature_fraction': 0.5940086652813431, 'bagging_fraction': 0.8054161226314384, 'bagging_freq': 7, 'learning_rate': 0.038942161158439834, 'max_bin': 95}. Best is trial 18 with value: 0.9956685603663644.
[I 2026-05-05 19:37:16,215] Trial 36 finished with value: 0.9956713950728802 and parameters: {'num_leaves': 172, 'max_depth': 3, 'min_child_samples': 5, 'lambda_l1': 1.2158568318093246e-06, 'lambda_l2': 1.1182701662877744e-07, 'min_gain_to_split': 0.21527568422880633, 'feature_fraction': 0.6104217815601655, 'bagging_fraction': 0.8822936933674879, 'bagging_freq': 3, 'learning_rate': 0.04405118445144062, 'max_bin': 95}. Best is trial 36 with value: 0.9956713950728802.
[I 2026-05-05 19:37:32,238] Trial 31 finished with value: 0.9955172610541378 and parameters: {'num_leaves': 28, 'max_depth': 6, 'min_child_samples': 6, 'lambda_l1': 0.0014792805245907436, 'lambda_l2': 0.022072627906426303, 'min_gain_to_split': 0.8496604049685154, 'feature_fraction': 0.8843185702987948, 'bagging_fraction': 0.6326147912930222, 'bagging_freq': 4, 'learning_rate': 0.02941932373780329, 'max_bin': 223}. Best is trial 36 with value: 0.9956713950728802.
[I 2026-05-05 19:37:36,961] Trial 35 finished with value: 0.9956190743402684 and parameters: {'num_leaves': 175, 'max_depth': 4, 'min_child_samples': 18, 'lambda_l1': 0.0008883435453461586, 'lambda_l2': 0.19495255453953178, 'min_gain_to_split': 0.6133456242430714, 'feature_fraction': 0.975246937685352, 'bagging_fraction': 0.8858886248513176, 'bagging_freq': 4, 'learning_rate': 0.030213368421795873, 'max_bin': 127}. Best is trial 36 with value: 0.9956713950728802.
[I 2026-05-05 19:37:43,573] Trial 33 finished with value: 0.9956409475573956 and parameters: {'num_leaves': 95, 'max_depth': 3, 'min_child_samples': 9, 'lambda_l1': 0.00032804576470198967, 'lambda_l2': 0.026723850514405973, 'min_gain_to_split': 0.7791333557331799, 'feature_fraction': 0.6541977017224149, 'bagging_fraction': 0.7590563270855434, 'bagging_freq': 1, 'learning_rate': 0.023004719746161674, 'max_bin': 255}. Best is trial 36 with value: 0.9956713950728802.
[I 2026-05-05 19:38:00,920] Trial 9 finished with value: 0.9954081879664092 and parameters: {'num_leaves': 60, 'max_depth': 8, 'min_child_samples': 9, 'lambda_l1': 2.2424571195781314e-06, 'lambda_l2': 0.00016476190757852137, 'min_gain_to_split': 0.42623275395241733, 'feature_fraction': 0.766871749061885, 'bagging_fraction': 0.5451496276954018, 'bagging_freq': 3, 'learning_rate': 0.01631839864949372, 'max_bin': 159}. Best is trial 36 with value: 0.9956713950728802.
[I 2026-05-05 19:38:36,868] Trial 38 finished with value: 0.9956356148811285 and parameters: {'num_leaves': 36, 'max_depth': 3, 'min_child_samples': 7, 'lambda_l1': 0.000151833732367096, 'lambda_l2': 0.4058817034830009, 'min_gain_to_split': 0.9324339023007762, 'feature_fraction': 0.827840279697759, 'bagging_fraction': 0.8720456555454066, 'bagging_freq': 3, 'learning_rate': 0.021218368111687393, 'max_bin': 255}. Best is trial 36 with value: 0.9956713950728802.
[I 2026-05-05 19:38:51,768] Trial 44 finished with value: 0.9956112738213119 and parameters: {'num_leaves': 251, 'max_depth': 4, 'min_child_samples': 12, 'lambda_l1': 5.590482981515547e-08, 'lambda_l2': 3.173429083044305e-06, 'min_gain_to_split': 0.1631546053289697, 'feature_fraction': 0.7101936604024353, 'bagging_fraction': 0.827968357613296, 'bagging_freq': 3, 'learning_rate': 0.07647809955376825, 'max_bin': 63}. Best is trial 36 with value: 0.9956713950728802.
[I 2026-05-05 19:39:07,203] Trial 34 finished with value: 0.995638505216002 and parameters: {'num_leaves': 86, 'max_depth': 4, 'min_child_samples': 9, 'lambda_l1': 9.240130430981063e-05, 'lambda_l2': 1.5797454533593067, 'min_gain_to_split': 0.8189762885384846, 'feature_fraction': 0.9225221852689603, 'bagging_fraction': 0.8615298740793836, 'bagging_freq': 1, 'learning_rate': 0.015830476153469226, 'max_bin': 191}. Best is trial 36 with value: 0.9956713950728802.
[I 2026-05-05 19:40:06,688] Trial 29 finished with value: 0.9956230279861428 and parameters: {'num_leaves': 248, 'max_depth': 11, 'min_child_samples': 30, 'lambda_l1': 0.03402009097711596, 'lambda_l2': 0.4147147208875178, 'min_gain_to_split': 0.8018620141004191, 'feature_fraction': 0.5752237627822289, 'bagging_fraction': 0.9117553322962343, 'bagging_freq': 7, 'learning_rate': 0.013448611372494104, 'max_bin': 95}. Best is trial 36 with value: 0.9956713950728802.
[I 2026-05-05 19:40:12,375] Trial 40 finished with value: 0.9956566649074514 and parameters: {'num_leaves': 86, 'max_depth': 4, 'min_child_samples': 5, 'lambda_l1': 0.02663464090095706, 'lambda_l2': 0.01010547832950847, 'min_gain_to_split': 0.8396551254683601, 'feature_fraction': 0.8229446226606594, 'bagging_fraction': 0.7365012357893111, 'bagging_freq': 2, 'learning_rate': 0.019928452370191963, 'max_bin': 255}. Best is trial 36 with value: 0.9956713950728802.
[I 2026-05-05 19:40:18,701] Trial 12 finished with value: 0.9955489491179638 and parameters: {'num_leaves': 61, 'max_depth': 8, 'min_child_samples': 46, 'lambda_l1': 3.2003222761323713e-06, 'lambda_l2': 0.00015099222057593005, 'min_gain_to_split': 0.7277316798355786, 'feature_fraction': 0.930526361812167, 'bagging_fraction': 0.7081052764007847, 'bagging_freq': 4, 'learning_rate': 0.008670791028174397, 'max_bin': 95}. Best is trial 36 with value: 0.9956713950728802.
[I 2026-05-05 19:40:36,214] Trial 43 finished with value: 0.9956019072721827 and parameters: {'num_leaves': 21, 'max_depth': 4, 'min_child_samples': 10, 'lambda_l1': 0.022737548638373652, 'lambda_l2': 2.426629962690583, 'min_gain_to_split': 0.9467568591545423, 'feature_fraction': 0.6544175745365872, 'bagging_fraction': 0.9309291801332682, 'bagging_freq': 2, 'learning_rate': 0.0196557158071682, 'max_bin': 255}. Best is trial 36 with value: 0.9956713950728802.
[I 2026-05-05 19:41:09,696] Trial 39 finished with value: 0.995627328906749 and parameters: {'num_leaves': 51, 'max_depth': 4, 'min_child_samples': 10, 'lambda_l1': 0.08575932766745756, 'lambda_l2': 0.2638405213677287, 'min_gain_to_split': 0.894729611988991, 'feature_fraction': 0.7947539655958209, 'bagging_fraction': 0.6212906944314172, 'bagging_freq': 3, 'learning_rate': 0.011624739258513733, 'max_bin': 255}. Best is trial 36 with value: 0.9956713950728802.
[I 2026-05-05 19:41:36,018] Trial 47 finished with value: 0.995645956819514 and parameters: {'num_leaves': 95, 'max_depth': 3, 'min_child_samples': 6, 'lambda_l1': 0.0013960598170063613, 'lambda_l2': 0.035849231020539746, 'min_gain_to_split': 0.7512243793185198, 'feature_fraction': 0.5163651325158564, 'bagging_fraction': 0.7074232194948445, 'bagging_freq': 1, 'learning_rate': 0.017548141465371744, 'max_bin': 223}. Best is trial 36 with value: 0.9956713950728802.
[I 2026-05-05 19:41:41,258] Trial 48 finished with value: 0.9956646644625499 and parameters: {'num_leaves': 127, 'max_depth': 3, 'min_child_samples': 13, 'lambda_l1': 0.00015740195100974314, 'lambda_l2': 0.0010573406148057915, 'min_gain_to_split': 0.9342193347904526, 'feature_fraction': 0.568948060390206, 'bagging_fraction': 0.7427385541453286, 'bagging_freq': 2, 'learning_rate': 0.018296906498919865, 'max_bin': 255}. Best is trial 36 with value: 0.9956713950728802.
[I 2026-05-05 19:41:44,881] Trial 41 finished with value: 0.9955700081230183 and parameters: {'num_leaves': 216, 'max_depth': 4, 'min_child_samples': 10, 'lambda_l1': 3.707673861022298e-05, 'lambda_l2': 2.6945899667402085, 'min_gain_to_split': 0.6925881857380494, 'feature_fraction': 0.9964910241878071, 'bagging_fraction': 0.7669188654008343, 'bagging_freq': 4, 'learning_rate': 0.013250869522095157, 'max_bin': 95}. Best is trial 36 with value: 0.9956713950728802.
[I 2026-05-05 19:41:49,079] Trial 24 finished with value: 0.9955791951590699 and parameters: {'num_leaves': 135, 'max_depth': 9, 'min_child_samples': 63, 'lambda_l1': 1.026882126971342e-07, 'lambda_l2': 3.086492836327151e-08, 'min_gain_to_split': 0.9604131143614552, 'feature_fraction': 0.538396909819014, 'bagging_fraction': 0.6706899552595833, 'bagging_freq': 5, 'learning_rate': 0.007147697832930898, 'max_bin': 191}. Best is trial 36 with value: 0.9956713950728802.
[I 2026-05-05 19:41:54,558] Trial 49 finished with value: 0.9956465686283529 and parameters: {'num_leaves': 118, 'max_depth': 3, 'min_child_samples': 17, 'lambda_l1': 2.985454169673534e-05, 'lambda_l2': 0.35845161754931415, 'min_gain_to_split': 0.9305767017076033, 'feature_fraction': 0.5717375255992563, 'bagging_fraction': 0.613795002851741, 'bagging_freq': 2, 'learning_rate': 0.02404570871539765, 'max_bin': 255}. Best is trial 36 with value: 0.9956713950728802.
[I 2026-05-05 19:42:03,728] Trial 37 finished with value: 0.9956161353651923 and parameters: {'num_leaves': 39, 'max_depth': 5, 'min_child_samples': 8, 'lambda_l1': 0.00045277764307307165, 'lambda_l2': 0.0032561683368737067, 'min_gain_to_split': 0.6412745382950861, 'feature_fraction': 0.7949446844058535, 'bagging_fraction': 0.791432919967867, 'bagging_freq': 1, 'learning_rate': 0.011169386096426951, 'max_bin': 223}. Best is trial 36 with value: 0.9956713950728802.
[I 2026-05-05 19:42:10,066] Trial 42 finished with value: 0.9956241934583195 and parameters: {'num_leaves': 57, 'max_depth': 3, 'min_child_samples': 15, 'lambda_l1': 0.00015083086325649457, 'lambda_l2': 4.837059975919953, 'min_gain_to_split': 0.6694321172225927, 'feature_fraction': 0.6385187055769579, 'bagging_fraction': 0.8128063932966648, 'bagging_freq': 1, 'learning_rate': 0.01161120404536803, 'max_bin': 255}. Best is trial 36 with value: 0.9956713950728802.
[I 2026-05-05 19:42:15,937] Trial 22 finished with value: 0.9955025861750144 and parameters: {'num_leaves': 27, 'max_depth': 8, 'min_child_samples': 7, 'lambda_l1': 2.2557261494972876e-05, 'lambda_l2': 4.8356779871171527e-08, 'min_gain_to_split': 0.10845473773908221, 'feature_fraction': 0.7388537732589076, 'bagging_fraction': 0.6170052506634711, 'bagging_freq': 7, 'learning_rate': 0.008483357468458816, 'max_bin': 63}. Best is trial 36 with value: 0.9956713950728802.
[I 2026-05-05 19:42:30,851] Trial 10 finished with value: 0.9954729261798221 and parameters: {'num_leaves': 72, 'max_depth': 12, 'min_child_samples': 8, 'lambda_l1': 0.0066493397303571235, 'lambda_l2': 0.0008077575700217869, 'min_gain_to_split': 0.8632181780342428, 'feature_fraction': 0.8455187902343829, 'bagging_fraction': 0.5289519109581469, 'bagging_freq': 6, 'learning_rate': 0.00805479526442681, 'max_bin': 95}. Best is trial 36 with value: 0.9956713950728802.
[I 2026-05-05 19:42:43,347] Trial 45 finished with value: 0.995625359569873 and parameters: {'num_leaves': 40, 'max_depth': 5, 'min_child_samples': 11, 'lambda_l1': 0.02916061816423291, 'lambda_l2': 2.2046951849591094, 'min_gain_to_split': 0.875573964203656, 'feature_fraction': 0.9832217063932372, 'bagging_fraction': 0.7207201732733017, 'bagging_freq': 1, 'learning_rate': 0.010122726138422817, 'max_bin': 255}. Best is trial 36 with value: 0.9956713950728802.
[I 2026-05-05 19:42:54,058] Trial 46 finished with value: 0.9956490987019002 and parameters: {'num_leaves': 50, 'max_depth': 3, 'min_child_samples': 9, 'lambda_l1': 0.00040222918971568857, 'lambda_l2': 0.08894744981895228, 'min_gain_to_split': 0.6608491477900419, 'feature_fraction': 0.518381529915495, 'bagging_fraction': 0.7834812269098982, 'bagging_freq': 2, 'learning_rate': 0.007613503205830335, 'max_bin': 255}. Best is trial 36 with value: 0.9956713950728802.
[I 2026-05-05 19:49:26,887] Trial 20 finished with value: 0.9954068552244439 and parameters: {'num_leaves': 137, 'max_depth': 12, 'min_child_samples': 14, 'lambda_l1': 0.0010142807444471253, 'lambda_l2': 8.727529950711935e-05, 'min_gain_to_split': 0.43985086856848343, 'feature_fraction': 0.5097266361720776, 'bagging_fraction': 0.6301814663187999, 'bagging_freq': 5, 'learning_rate': 0.0058931075710505374, 'max_bin': 63}. Best is trial 36 with value: 0.9956713950728802.
====================================================================== Optuna Optimization Summary ====================================================================== Number of finished trials: 50 Best trial: 36 Best value: 0.995671 Best hyperparameters: num_leaves: 172 max_depth: 3 min_child_samples: 5 lambda_l1: 0.000001 lambda_l2: 0.000000 min_gain_to_split: 0.215276 feature_fraction: 0.610422 bagging_fraction: 0.882294 bagging_freq: 3 learning_rate: 0.044051 max_bin: 95 Additional attributes: cv_scores: [0.9956319391345688, 0.9971030946093824, 0.9950893041314529, 0.9952388175351814, 0.9952938199538153] cv_std: 0.0007375413879422372 mean_training_loss: 0.10258775495897347 mean_validation_loss: 0.19172524925699416 best_iteration: 195 ====================================================================== Optimization complete! Best score: 0.9957 Time: 1111.1s Training final model with best parameters... [LightGBM] [Warning] feature_fraction is set=0.6104217815601655, colsample_bytree=1.0 will be ignored. Current value: feature_fraction=0.6104217815601655 [LightGBM] [Warning] lambda_l2 is set=1.1182701662877744e-07, reg_lambda=0.0 will be ignored. Current value: lambda_l2=1.1182701662877744e-07 [LightGBM] [Warning] min_gain_to_split is set=0.21527568422880633, min_split_gain=0.0 will be ignored. Current value: min_gain_to_split=0.21527568422880633 [LightGBM] [Warning] lambda_l1 is set=1.2158568318093246e-06, reg_alpha=0.0 will be ignored. Current value: lambda_l1=1.2158568318093246e-06 [LightGBM] [Warning] bagging_fraction is set=0.8822936933674879, subsample=1.0 will be ignored. Current value: bagging_fraction=0.8822936933674879 [LightGBM] [Warning] bagging_freq is set=3, subsample_freq=0 will be ignored. Current value: bagging_freq=3 [LightGBM] [Warning] feature_fraction is set=0.6104217815601655, colsample_bytree=1.0 will be ignored. Current value: feature_fraction=0.6104217815601655 [LightGBM] [Warning] lambda_l2 is set=1.1182701662877744e-07, reg_lambda=0.0 will be ignored. Current value: lambda_l2=1.1182701662877744e-07 [LightGBM] [Warning] min_gain_to_split is set=0.21527568422880633, min_split_gain=0.0 will be ignored. Current value: min_gain_to_split=0.21527568422880633 [LightGBM] [Warning] lambda_l1 is set=1.2158568318093246e-06, reg_alpha=0.0 will be ignored. Current value: lambda_l1=1.2158568318093246e-06 [LightGBM] [Warning] bagging_fraction is set=0.8822936933674879, subsample=1.0 will be ignored. Current value: bagging_fraction=0.8822936933674879 [LightGBM] [Warning] bagging_freq is set=3, subsample_freq=0 will be ignored. Current value: bagging_freq=3 [LightGBM] [Info] Auto-choosing col-wise multi-threading, the overhead of testing was 0.001779 seconds. You can set `force_col_wise=true` to remove the overhead. [LightGBM] [Info] Total Bins 1520 [LightGBM] [Info] Number of data points in the train set: 10888, number of used features: 16 [LightGBM] [Info] Start training from score -2.332227 [LightGBM] [Info] Start training from score -3.259935 [LightGBM] [Info] Start training from score -2.122225 [LightGBM] [Info] Start training from score -1.344914 [LightGBM] [Info] Start training from score -1.954581 [LightGBM] [Info] Start training from score -1.904618 [LightGBM] [Info] Start training from score -1.641447 [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf [LightGBM] [Warning] No further splits with positive gain, best gain: -inf Generating SHAP explanations...
100%|===================| 3497/3500 [01:05<00:00]
SHAP values computed for 500 samples Top 5 SHAP features: ShapeFactor1: 0.3931 ConvexArea: 0.3822 Perimeter: 0.3613 roundness: 0.3609 MinorAxisLength: 0.3506 ====================================================================== Training Complete! ====================================================================== === Training Summary === Model: LGBMClassifier Best Score: 0.9957 CV Score: 0.0000 ± 0.0000 Features: 16/16 Training Time: 1186.3s Optimization Time: 1111.1s Best Hyperparameters: num_leaves: 172 max_depth: 3 min_child_samples: 5 lambda_l1: 0.0000 lambda_l2: 0.0000 min_gain_to_split: 0.2153 feature_fraction: 0.6104 bagging_fraction: 0.8823 bagging_freq: 3 learning_rate: 0.0441 max_bin: 95 n_estimators: 195 ======================================================================
8. Unpacking the Results¶
print(state.summary())
fold_scores = state.study.best_trial.user_attrs.get('cv_scores', [])
fold_std = state.study.best_trial.user_attrs.get('cv_std', 0.0)
if fold_scores:
print(f"\nBest trial — per-fold AUC : {[round(s, 4) for s in fold_scores]}")
print(f"Mean \u00b1 Std : {np.mean(fold_scores):.4f} \u00b1 {fold_std:.4f}")
print(f"\nTraining state snapshot:")
print(f" Model : {type(state.model).__name__}")
print(f" SHAP values : {'Available' if state.shap_values is not None else 'Not computed'}")
print(f" Training time : {state.training_time_seconds:.1f}s")
=== Training Summary === Model: LGBMClassifier Best Score: 0.9957 CV Score: 0.0000 ± 0.0000 Features: 16/16 Training Time: 1186.3s Optimization Time: 1111.1s Best Hyperparameters: num_leaves: 172 max_depth: 3 min_child_samples: 5 lambda_l1: 0.0000 lambda_l2: 0.0000 min_gain_to_split: 0.2153 feature_fraction: 0.6104 bagging_fraction: 0.8823 bagging_freq: 3 learning_rate: 0.0441 max_bin: 95 n_estimators: 195 Best trial — per-fold AUC : [0.9956, 0.9971, 0.9951, 0.9952, 0.9953] Mean ± Std : 0.9957 ± 0.0007 Training state snapshot: Model : LGBMClassifierWrapper SHAP values : Available Training time : 1186.3s
if state.feature_importance is not None:
top_n = min(16, len(state.feature_importance))
top_features = state.feature_importance.head(top_n)
fig, ax = plt.subplots(figsize=(10, 6))
ax.barh(top_features['feature'][::-1], top_features['importance'][::-1],
color="#3B82F6", edgecolor='white', linewidth=0.5)
ax.set_title(f"Native Tree Feature Importance (top {top_n})", fontweight="bold", fontsize=13)
ax.set_xlabel("Importance Score")
ax.grid(axis='x', alpha=0.3)
plt.tight_layout()
plt.show()
9. Evaluating on Unseen Data¶
y_pred_proba = state.model.predict_proba(X_test_transformed)
y_pred = np.argmax(y_pred_proba, axis=1)
y_pred_labels = le.inverse_transform(y_pred)
# SDK-level structured metrics: serialisable numbers for metadata and reports.
test_report = evaluate_classification(
y_true=y_test_encoded,
y_pred_proba=y_pred_proba,
labels=list(range(len(le.classes_))),
)
print(f"Prediction shape : {y_pred_proba.shape} (one probability per class per row)")
print("Structured metric keys:", sorted(test_report.metrics.keys()))
cm = confusion_matrix(y_test_encoded, y_pred)
fig, ax = plt.subplots(figsize=(9, 7))
sns.heatmap(cm, annot=True, fmt='d', cmap='Blues',
xticklabels=le.classes_, yticklabels=le.classes_,
ax=ax, linewidths=0.5)
ax.set_xlabel('Predicted', fontsize=12)
ax.set_ylabel('Actual', fontsize=12)
ax.set_title('Confusion Matrix \u2014 Dry Bean Variety Classification', fontweight="bold", fontsize=13)
ax.tick_params(axis='x', rotation=45)
ax.tick_params(axis='y', rotation=0)
plt.tight_layout()
plt.show()
[LightGBM] [Warning] feature_fraction is set=0.6104217815601655, colsample_bytree=1.0 will be ignored. Current value: feature_fraction=0.6104217815601655 [LightGBM] [Warning] lambda_l2 is set=1.1182701662877744e-07, reg_lambda=0.0 will be ignored. Current value: lambda_l2=1.1182701662877744e-07 [LightGBM] [Warning] min_gain_to_split is set=0.21527568422880633, min_split_gain=0.0 will be ignored. Current value: min_gain_to_split=0.21527568422880633 [LightGBM] [Warning] lambda_l1 is set=1.2158568318093246e-06, reg_alpha=0.0 will be ignored. Current value: lambda_l1=1.2158568318093246e-06 [LightGBM] [Warning] bagging_fraction is set=0.8822936933674879, subsample=1.0 will be ignored. Current value: bagging_fraction=0.8822936933674879 [LightGBM] [Warning] bagging_freq is set=3, subsample_freq=0 will be ignored. Current value: bagging_freq=3 Prediction shape : (2723, 7) (one probability per class per row)
print("Per-Class Classification Report")
print("=" * 65)
print(classification_report(y_test_encoded, y_pred, target_names=le.classes_))
Per-Class Classification Report
=================================================================
precision recall f1-score support
BARBUNYA 0.96 0.90 0.93 265
BOMBAY 1.00 1.00 1.00 104
CALI 0.94 0.94 0.94 326
DERMASON 0.90 0.93 0.91 709
HOROZ 0.97 0.96 0.96 386
SEKER 0.94 0.96 0.95 406
SIRA 0.88 0.87 0.87 527
accuracy 0.93 2723
macro avg 0.94 0.94 0.94 2723
weighted avg 0.93 0.93 0.93 2723
accuracy = accuracy_score(y_test_encoded, y_pred)
balanced_acc = balanced_accuracy_score(y_test_encoded, y_pred)
macro_f1 = f1_score(y_test_encoded, y_pred, average='macro')
weighted_f1 = f1_score(y_test_encoded, y_pred, average='weighted')
roc_auc = roc_auc_score(y_test_encoded, y_pred_proba, multi_class='ovr', average='macro')
print("=" * 55)
print(" TEST SET \u2014 AGGREGATE METRICS")
print("=" * 55)
print(f" Accuracy : {accuracy:.4f}")
print(f" Balanced Accuracy : {balanced_acc:.4f} \u2190 accounts for class imbalance")
print(f" Macro F1 : {macro_f1:.4f} \u2190 treats each variety equally")
print(f" Weighted F1 : {weighted_f1:.4f}")
print(f" ROC AUC (OvR macro) : {roc_auc:.4f}")
print("=" * 55)
print(f"\n Majority-class baseline accuracy : {majority_acc:.4f}")
print(f" Improvement over baseline : +{accuracy - majority_acc:.4f}")
======================================================= TEST SET — AGGREGATE METRICS ======================================================= Accuracy : 0.9266 Balanced Accuracy : 0.9364 ← accounts for class imbalance Macro F1 : 0.9388 ← treats each variety equally Weighted F1 : 0.9265 ROC AUC (OvR macro) : 0.9952 ======================================================= Majority-class baseline accuracy : 0.2605 Improvement over baseline : +0.6660
9.1 Per-Class ROC AUC (One-vs-Rest)¶
y_test_bin = label_binarize(y_test_encoded, classes=list(range(len(le.classes_))))
print("Per-Class ROC AUC (One-vs-Rest):")
print("-" * 35)
per_class_aucs = {}
for i, class_name in enumerate(le.classes_):
auc_i = roc_auc_score(y_test_bin[:, i], y_pred_proba[:, i])
per_class_aucs[class_name] = auc_i
bar = '\u2588' * int(auc_i * 30)
print(f" {class_name:<10} AUC = {auc_i:.4f} {bar}")
print(f" {'Macro':<10} AUC = {roc_auc:.4f}")
fig, ax = plt.subplots(figsize=(9, 4))
auc_values = [per_class_aucs[c] for c in le.classes_]
bar_colors = [BEAN_COLORS.get(c, '#6B7280') for c in le.classes_]
bars = ax.bar(list(le.classes_), auc_values, color=bar_colors, edgecolor='#555555', linewidth=0.8)
ax.axhline(roc_auc, color='#DC2626', ls='--', lw=1.5, label=f'Macro avg = {roc_auc:.4f}')
ax.set_ylim(0.5, 1.05)
ax.set_ylabel("ROC AUC (OvR)")
ax.set_title("Per-Class ROC AUC \u2014 One-vs-Rest", fontweight="bold", fontsize=13)
ax.legend(fontsize=10)
ax.grid(axis='y', alpha=0.3)
ax.tick_params(axis='x', rotation=30)
for bar, auc_val in zip(bars, auc_values):
ax.text(bar.get_x() + bar.get_width() / 2, bar.get_height() + 0.004,
f"{auc_val:.4f}", ha='center', va='bottom', fontsize=8)
plt.tight_layout()
plt.show()
Per-Class ROC AUC (One-vs-Rest): ----------------------------------- BARBUNYA AUC = 0.9944 █████████████████████████████ BOMBAY AUC = 1.0000 ██████████████████████████████ CALI AUC = 0.9963 █████████████████████████████ DERMASON AUC = 0.9928 █████████████████████████████ HOROZ AUC = 0.9986 █████████████████████████████ SEKER AUC = 0.9974 █████████████████████████████ SIRA AUC = 0.9867 █████████████████████████████ Macro AUC = 0.9952
10. SHAP Explainability — Which Shape Features Drive Variety?¶
if state.shap_feature_importance is not None:
shap_importance = state.shap_feature_importance
top_n_shap = min(16, len(shap_importance))
top_shap = shap_importance.head(top_n_shap)
fig, ax = plt.subplots(figsize=(10, 6))
ax.barh(top_shap['feature'][::-1], top_shap['importance'][::-1],
color="#10B981", edgecolor='white', linewidth=0.5)
ax.set_title(f"SHAP Global Feature Importance (top {top_n_shap})", fontweight="bold", fontsize=13)
ax.set_xlabel("Mean |SHAP value| (aggregated across all classes)")
ax.grid(axis='x', alpha=0.3)
plt.tight_layout()
plt.show()
if state.feature_importance is not None:
tree_rank = state.feature_importance.assign(
tree_rank=range(1, len(state.feature_importance) + 1)
).rename(columns={'importance': 'tree_importance'})
shap_rank = shap_importance.assign(
shap_rank=range(1, len(shap_importance) + 1)
).rename(columns={'importance': 'shap_importance'})
comparison = (
tree_rank.merge(shap_rank, on='feature')
.assign(rank_delta=lambda d: (d['tree_rank'] - d['shap_rank']).abs())
.sort_values('shap_rank').head(12)
)
print("\nFeature ranking: tree importance vs SHAP (sorted by SHAP rank):")
display(comparison[['feature', 'tree_rank', 'shap_rank', 'rank_delta']])
else:
print("SHAP importance not available.")
Feature ranking: tree importance vs SHAP (sorted by SHAP rank):
| feature | tree_rank | shap_rank | rank_delta | |
|---|---|---|---|---|
| 3 | ShapeFactor1 | 4 | 1 | 3 |
| 9 | ConvexArea | 10 | 2 | 8 |
| 6 | Perimeter | 7 | 3 | 4 |
| 0 | roundness | 1 | 4 | 3 |
| 5 | MinorAxisLength | 6 | 5 | 1 |
| 12 | Area | 13 | 6 | 7 |
| 1 | ShapeFactor4 | 2 | 7 | 5 |
| 10 | ShapeFactor3 | 11 | 8 | 3 |
| 7 | MajorAxisLength | 8 | 9 | 1 |
| 8 | Compactness | 9 | 10 | 1 |
| 4 | Extent | 5 | 11 | 6 |
| 13 | ShapeFactor2 | 14 | 12 | 2 |
11. Packaging for Production¶
metadata = ModelMetadata(
name="dry_bean_classifier_v1",
version="1.0.0",
model_type=state.model.model_type,
framework=state.model.framework,
task="multiclass_classification",
trained_at=datetime.now(),
feature_names=list(X_train_transformed.columns),
n_features=X_train_transformed.shape[1],
hyperparameters=state.best_params,
training_time_seconds=state.training_time_seconds,
tags=["multiclass", "dry_bean", "morphology", "lightgbm", "uci"],
notes="7-class dry bean variety classifier. Stratified 80/20 split. Standard scaling.",
classes=list(le.classes_)
)
metadata.add_cv_scores("roc_auc", fold_scores if fold_scores else [state.best_score])
metadata.add_metric("test_roc_auc_macro_ovr", roc_auc)
metadata.add_metric("test_macro_f1", macro_f1)
metadata.add_metric("test_weighted_f1", weighted_f1)
metadata.add_metric("test_accuracy", accuracy)
metadata.add_metric("test_balanced_accuracy", balanced_acc)
for class_name, auc_val in per_class_aucs.items():
metadata.add_metric(f"test_roc_auc_{class_name.lower()}", auc_val)
metadata.add_dataset(X_train_transformed, y_train, "train")
metadata.add_dataset(X_test_transformed, y_test, "test")
print(metadata.summary())
Model: dry_bean_classifier_v1 (v1.0.0) Type: LGBMClassifier (lightgbm) Task: multiclass_classification Features: 16 Trained: 2026-05-05 19:59 Performance Metrics: test_roc_auc_macro_ovr: 0.9952 test_macro_f1: 0.9388 test_weighted_f1: 0.9265 test_accuracy: 0.9266 test_balanced_accuracy: 0.9364 test_roc_auc_barbunya: 0.9944 test_roc_auc_bombay: 1.0000 test_roc_auc_cali: 0.9963 test_roc_auc_dermason: 0.9928 test_roc_auc_horoz: 0.9986 test_roc_auc_seker: 0.9974 test_roc_auc_sira: 0.9867 Cross-Validation: roc_auc: 0.9957 ± 0.0007 Training Data: 10888 samples Test Data: 2723 samples
model_path = "models/dry_bean_lgbm_v1.pkl"
os.makedirs("models", exist_ok=True)
ModelSerializer.save(
model=state.model,
path=model_path,
metadata=metadata,
train_data=(X_train_transformed, y_train_encoded),
test_data=(X_test_transformed, y_test_encoded),
include_datasets=True
)
print(f"Model package \u2192 {model_path}")
Model package → models/dry_bean_lgbm_v1.pkl
package = ModelSerializer.load(model_path)
inference_model = package.model
inference_pipeline = TransformPipeline.load(pipeline_path)
saved_classes = package.metadata.classes
inference_le = LabelEncoder()
inference_le.fit(saved_classes)
new_beans_raw = X_test.iloc[:6].copy()
new_beans_transformed = inference_pipeline.transform(new_beans_raw)
new_proba = inference_model.predict_proba(new_beans_transformed)
new_pred_labels = inference_le.inverse_transform(np.argmax(new_proba, axis=1))
results_df = new_beans_raw[['Area', 'Perimeter', 'MajorAxisLength', 'Compactness']].assign(
predicted_variety=new_pred_labels,
confidence=new_proba.max(axis=1).round(4),
ground_truth=y_test.iloc[:6].values
)
print("=" * 65)
print(" INFERENCE RESULTS (6 sample beans)")
print("=" * 65)
display(results_df)
print("\nInference complete: two artefacts (pipeline + model), zero leakage, full reproducibility.")
[LightGBM] [Warning] feature_fraction is set=0.6104217815601655, colsample_bytree=1.0 will be ignored. Current value: feature_fraction=0.6104217815601655 [LightGBM] [Warning] lambda_l2 is set=1.1182701662877744e-07, reg_lambda=0.0 will be ignored. Current value: lambda_l2=1.1182701662877744e-07 [LightGBM] [Warning] min_gain_to_split is set=0.21527568422880633, min_split_gain=0.0 will be ignored. Current value: min_gain_to_split=0.21527568422880633 [LightGBM] [Warning] lambda_l1 is set=1.2158568318093246e-06, reg_alpha=0.0 will be ignored. Current value: lambda_l1=1.2158568318093246e-06 [LightGBM] [Warning] bagging_fraction is set=0.8822936933674879, subsample=1.0 will be ignored. Current value: bagging_fraction=0.8822936933674879 [LightGBM] [Warning] bagging_freq is set=3, subsample_freq=0 will be ignored. Current value: bagging_freq=3 ================================================================= INFERENCE RESULTS (6 sample beans) =================================================================
| Area | Perimeter | MajorAxisLength | Compactness | predicted_variety | confidence | ground_truth | |
|---|---|---|---|---|---|---|---|
| 12803 | 36002 | 700.889 | 257.888986 | 0.830205 | DERMASON | 0.8596 | DERMASON |
| 3713 | 183825 | 1594.423 | 582.225240 | 0.830934 | BOMBAY | 0.9997 | BOMBAY |
| 8974 | 45595 | 801.717 | 301.092828 | 0.800227 | SIRA | 0.9897 | SIRA |
| 1743 | 45084 | 763.811 | 261.138204 | 0.917478 | SEKER | 0.9997 | SEKER |
| 2303 | 61645 | 952.199 | 335.139136 | 0.835947 | BARBUNYA | 0.9065 | BARBUNYA |
| 192 | 34321 | 669.531 | 227.995845 | 0.916871 | SEKER | 0.9990 | SEKER |
Inference complete: two artefacts (pipeline + model), zero leakage, full reproducibility.
What You Built¶
| You Wrote | BitBullet Handled |
|---|---|
generate_feature_stats(X) |
Full statistical audit — all 16 numerical features in one call |
LabelEncoder().fit(y) before splitting |
Invertible integer coding covering all 7 classes |
train_test_split(stratify=y) |
All seven class proportions preserved |
Declared standard_scale in pipeline.add() |
Scaling fit on train only, applied consistently to test |
Set task="multiclass_classification" in TrainConfig |
Softmax objective, multiclass CV scoring, correct SHAP aggregation |
trainer.fit(X_train_transformed, y_train_encoded) |
Optuna TPE, Stratified K-Fold CV, early stopping per fold |
np.argmax(predict_proba(...), axis=1) |
Argmax decoding from seven-class softmax probability vectors |
ModelMetadata(classes=list(le.classes_)) |
Class label map plus target mapping embedded — inference can decode predictions without a separate notebook variable |
Continue the Academy:
03_Clustering.ipynb— unsupervised segmentation withbitbullet.cluster04_Data_Transformations.ipynb— deep dive into every transform in the library05_Model_Management.ipynb— versioning, comparison, and model governance