prefácio
- Este artigo enfoca o conhecimento básico e as habilidades de análise de dados e explora o processo completo, desde a exploração de dados até a modelagem e a interpretação do modelo
- O conteúdo inclui exploração de dados, construção de modelo, habilidades de ajuste de parâmetros, explicação do modelo SHAP
- Os dados vêm da plataforma kaggle, conjunto de dados de previsão da idade do caranguejo, detalhes dos dados
os dados mostram
fundo de dados
Os caranguejos são deliciosos e muitos países do mundo importam grandes quantidades de caranguejos para consumo todos os anos. As principais vantagens da caranguejeira são os baixos custos de mão-de-obra, os custos de produção relativamente baixos e o rápido crescimento. A criação comercial de caranguejo está desenvolvendo o estilo de vida das pessoas nas áreas costeiras. Com os devidos cuidados e manejo, podemos ganhar mais dinheiro com a caranguejeira do que com a carcinicultura. Você pode manter caranguejos de lama em dois sistemas. Desenvolver sistemas de cultivo e engorda.
valor de dados
Para os criadores comerciais de caranguejos, saber a idade correta dos caranguejos os ajuda a decidir se e quando colhê-los. Os caranguejos crescem desprezíveis em suas características físicas além de uma certa idade, por isso é importante cronometrar a colheita para reduzir custos e aumentar os lucros. Os objetivos deste conjunto de dados são:
- Análise Exploratória de Dados - Veja como diferentes características físicas mudam com a idade.
- Engenharia de recursos - Defina novos recursos usando uma determinada combinação de pontos de dados para ajudar a melhorar a precisão do modelo.
- Modelo de regressão - Construa um modelo de regressão para prever a idade do caranguejo.
campo de dados
Sex
: Sexo do caranguejo - macho (M), fêmea (F) e indeterminado (I).Length
: comprimento do caranguejo (em pés; 1 pé = 30,48 cm)Diameter
: diâmetro do caranguejo em pés; 1 pé = 30,48 cm)Height
: altura do caranguejo (em pés; 1 pé = 30,48 cm)Weight
: o peso do caranguejo em onças; 1 libra = 16 onçasShucked Weight
: Peso sem casca (em onças; 1 lb = 16 oz)Viscera Weight
: Peso dos órgãos abdominais no fundo do corpo (em onças; 1 libra = 16 onças)Shell Weight
: Peso da Caixa (oz; 1 lb = 16 oz)Age
: idade do caranguejo (meses)
pacote dependente
pandas
: ler dados, pacote baseydata-profiling
: Pacote de exploração rápida de dados, endereço do projeto Github , documentos oficiaissklearn
: Pacote clássico de modelo de aprendizado de máquina, aqui não há muita introduçãoshap
: SHAP (SHapley Additive exPlanations) é uma abordagem teórica de jogos para explicar a saída de qualquer modelo de aprendizado de máquina. Ele vincula atribuições de crédito ótimas a interpretações locais, usando valores clássicos de Shapley e suas extensões relacionadas da teoria dos jogos (consulte o artigo para obter detalhes e citações ).- A análise a seguir é baseada no suporte dos pacotes acima. Use-o com antecedência para
pip install
instalá-lo. Se for usado no Jupyter Notebook, use ```!pip install``.
Importar pacotes necessários
import numpy as np
import pandas as pd
from plotnine import*
import seaborn as sns
from scipy import stats
import matplotlib as mpl
import matplotlib.pyplot as plt
#中文显示问题
plt.rcParams['font.sans-serif']=['SimHei']
plt.rcParams['axes.unicode_minus'] = False
# notebook嵌入图片
%matplotlib inline
# 提高分辨率
%config InlineBackend.figure_format='retina'
from ydata_profiling import ProfileReport
import shap
# 忽略警告
import warnings
warnings.filterwarnings('ignore')
Importar dados
df = pd.read_csv('/kaggle/input/crab-age-prediction/CrabAgePrediction.csv')
df.head()
saída :
Sex Length Diameter Height Weight Shucked Weight Viscera Weight Shell Weight Age
0 F 1.4375 1.1750 0.4125 24.635715 12.332033 5.584852 6.747181 9
1 M 0.8875 0.6500 0.2125 5.400580 2.296310 1.374951 1.559222 6
2 I 1.0375 0.7750 0.2500 7.952035 3.231843 1.601747 2.764076 6
3 F 1.1750 0.8875 0.2500 13.480187 4.748541 2.282135 5.244657 10
4 I 0.8875 0.6625 0.2125 6.903103 3.458639 1.488349 1.700970 6
análise de dados
profile = ProfileReport(df, title="Crab data report")
profile.to_notebook_iframe()
- Como o CSDN não pode incorporar arquivos html, aqui podemos apenas dividir o relatório de dados completo e explicá-lo separadamente.
visão geral
- As seguintes informações podem ser obtidas a partir da figura acima:
- Os dados contêm um total de 9 recursos
- Os dados têm um total de 3893 amostras
- A amostra de dados não tem nenhuma falta ou repetição
- Há 1 variável categórica e as outras 8 são variáveis numéricas
- As seguintes informações podem ser obtidas a partir da figura acima:
- características têm uma forte correlação
Length
comDiameter
- características têm uma forte correlação
Length
comHeight
- características têm uma forte correlação
Length
comWeight
- características têm uma forte correlação
Length
comShucked Weight
- características têm uma forte correlação
Length
comViscera Weight
- características têm uma forte correlação
Length
comShell Weight
- características têm uma forte correlação
Length
comAge
- características têm uma forte correlação
variável
- As seguintes informações podem ser obtidas a partir da figura acima:
- O recurso
Sex
é uma variável categórica, com um total de 3 categorias - Entre eles,
M
existem 1.435 amostras de categoria,I
1.233 amostras de categoria eF
1.225 amostras de categoria.
- O recurso
- As seguintes informações podem ser obtidas a partir da figura acima:
- O recurso
Length
é uma variável numérica, um total de 134 valores apareceu e a razão da diferença foi de 3,4% - De acordo com o histograma, pode-se ver que a distribuição de dados é assimétrica para a direita
- Obtenha várias características estatísticas deste recurso, como valores máximos e mínimos, valores médios, quartis, etc.
- O recurso
- As seguintes informações podem ser obtidas a partir da figura acima:
- O recurso
Diameter
é uma variável numérica, um total de 111 valores apareceu e a razão da diferença foi de 2,9% - De acordo com o histograma, pode-se ver que a distribuição de dados é assimétrica para a direita
- Obtenha várias características estatísticas deste recurso, como valores máximos e mínimos, valores médios, quartis, etc.
- O recurso
- As seguintes informações podem ser obtidas a partir da figura acima:
- O recurso
Height
é uma variável numérica, um total de 51 valores apareceram e a razão da diferença é de 1,3% - De acordo com o histograma, pode-se observar que a distribuição dos dados é normalmente distribuída, mas o valor máximo é 2,825, o que é um pouco anormal e pode precisar ser considerado para eliminação.
- Existem valores de 2 0, representando 0,1% da amostra total.De acordo com a experiência, o comprimento não pode ser 0, portanto essas 2 amostras podem ser amostras anormais e precisam ser eliminadas.
- Obtenha várias características estatísticas deste recurso, como valores máximos e mínimos, valores médios, quartis, etc.
- O recurso
- As seguintes informações podem ser obtidas a partir da figura acima:
- O recurso
Weight
é uma variável numérica, um total de 2343 valores apareceram e a razão da diferença é de 60,2% - De acordo com o histograma, pode-se ver que a distribuição dos dados é tendenciosa à esquerda. Valores após 60 precisam considerar se são outliers em potencial e tratá-los de acordo.
- Obtenha várias características estatísticas deste recurso, como valores máximos e mínimos, valores médios, quartis, etc.
- O recurso
- As seguintes informações podem ser obtidas a partir da figura acima:
- O recurso
Shucked Weight
é uma variável numérica, um total de 1482 valores apareceram e a razão da diferença é de 38,1% - De acordo com o histograma, pode-se ver que a distribuição dos dados tem um certo viés à esquerda. Valores após 30 precisam considerar se são outliers em potencial e tratá-los de acordo.
- Obtenha várias características estatísticas deste recurso, como valores máximos e mínimos, valores médios, quartis, etc.
- O recurso
- As seguintes informações podem ser obtidas a partir da figura acima:
- O recurso
Viscera Weight
é uma variável numérica, um total de 867 valores apareceu e a razão da diferença foi de 22,3% - De acordo com o histograma, pode-se ver que a distribuição dos dados tem um certo viés à esquerda. Valores após 15 precisam considerar se são outliers em potencial e tratá-los de acordo.
- Obtenha várias características estatísticas deste recurso, como valores máximos e mínimos, valores médios, quartis, etc.
- O recurso
- As seguintes informações podem ser obtidas a partir da figura acima:
- O recurso
Shell Weight
é uma variável numérica, um total de 907 valores apareceu e a razão da diferença foi de 23,3% - De acordo com o histograma, pode-se ver que a distribuição dos dados tem um certo viés à esquerda. Valores após 20 precisam considerar se são outliers em potencial e tratá-los de acordo.
- Obtenha várias características estatísticas deste recurso, como valores máximos e mínimos, valores médios, quartis, etc.
- O recurso
- As seguintes informações podem ser obtidas a partir da figura acima:
- O recurso
Age
é uma variável numérica, são 28 valores no total e a razão da diferença é de 0,7% - De acordo com o histograma, pode-se perceber que a distribuição dos dados é basicamente uma distribuição normal. Valores após 25 precisam considerar se são potenciais outliers e tratá-los de acordo.
- Obtenha várias características estatísticas deste recurso, como valores máximos e mínimos, valores médios, quartis, etc.
- O recurso
diagrama de interação
- Aqui você pode escolher duas variáveis diferentes, pois o espaço é limitado, aqui mostra apenas o gráfico de interação com o eixo vertical
Weight
e o eixo horizontal .Age
Diagrama de correlação
- As informações altamente relevantes mostradas na figura acima foram explicadas no estágio de visão geral, portanto não entrarei em detalhes aqui.
processamento de dados
- De acordo com a análise de dados acima, os dados são processados de acordo
Height
Remova as amostras com 0 no recurso- Como
Sex
não há relação de tamanho, é codificado em um ponto, usandodf = pd.get_dummies(df,columns=["Sex"])
- O algoritmo de floresta de isolamento em uso
sklearn
remove possíveis outliers e a proporção de outliers é 0,05 (valor empírico) - Padronizar (
zscore
) transformar os dados. Devido à pequena quantidade de dados, o conjunto de treinamento é 0,9, o conjunto de teste é 0,1 e o MSE médio do teste cruzado de 10 vezes é usado como padrão de avaliação - Com a idade como variável dependente e o restante das características como variáveis independentes, um modelo de regressão é construído
Construir modelos e ajustar parâmetros
- Use sklearn para construir uma variedade de modelos de regressão, como
gbr
,catboost
,lightgbm
etc.
EU IA | Modelo | MAE | MSE | RMSE | R2 | RMSLE | MAPA | TT (seg) |
---|---|---|---|---|---|---|---|---|
gbr | Regressor de aumento de gradiente | 1.5019 | 4.4889 | 2.1169 | 0,5530 | 0,1727 | 0,1501 | 0,3410 |
impulso do gato | CatBoost Regressor | 1.5082 | 4.5334 | 2.1277 | 0,5485 | 0,1729 | 0,1505 | 2.6590 |
lightgbm | Máquina de aumento de gradiente de luz | 1,5240 | 4.6280 | 2.1504 | 0,5389 | 0,1751 | 0,1516 | 0,4320 |
rf | Random Forest Regressor | 1.5338 | 4.6551 | 2.1561 | 0,5363 | 0,1762 | 0,1535 | 0,8190 |
et | Extra Trees Regressor | 1.5494 | 4.7462 | 2.1772 | 0,5267 | 0,1780 | 0,1552 | 0,4890 |
cume | Regressão Ridge | 1.5771 | 4.8477 | 2.1979 | 0,5166 | 0,1824 | 0,1596 | 0,0430 |
lr | Regressão linear | 1,5772 | 4.8479 | 2.1980 | 0,5165 | 0,1822 | 0,1596 | 0,4730 |
lar | Regressão de menor ângulo | 1,5772 | 4.8479 | 2.1980 | 0,5165 | 0,1822 | 0,1596 | 0,0470 |
br | cume bayesiano | 1.5771 | 4.8482 | 2.1980 | 0,5166 | 0,1824 | 0,1596 | 0,0440 |
huber | Huber Regressor | 1,5435 | 4.9130 | 2.2136 | 0,5105 | 0,1814 | 0,1503 | 0,0620 |
xgboost | Aumento de Gradiente Extremo | 1,5884 | 5.0390 | 2.2429 | 0,4972 | 0,1822 | 0.1581 | 0.2910 |
knn | K Neighbors Regressor | 1.6147 | 5.1607 | 2.2705 | 0.4856 | 0.1853 | 0.1599 | 0.0500 |
omp | Orthogonal Matching Pursuit | 1.8157 | 6.1171 | 2.4715 | 0.3917 | 0.2084 | 0.1867 | 0.0400 |
en | Elastic Net | 1.8855 | 6.6865 | 2.5833 | 0.3367 | 0.2212 | 0.2007 | 0.0440 |
lasso | Lasso Regression | 1.9536 | 7.1238 | 2.6663 | 0.2937 | 0.2360 | 0.2154 | 0.0440 |
llar | Lasso Least Angle Regression | 1.9536 | 7.1238 | 2.6663 | 0.2937 | 0.2360 | 0.2154 | 0.0420 |
ada | AdaBoost Regressor | 2.2463 | 7.2386 | 2.6873 | 0.2767 | 0.2325 | 0.2479 | 0.1820 |
dt | Decision Tree Regressor | 2.0626 | 8.9308 | 2.9865 | 0.1079 | 0.2389 | 0.2035 | 0.0530 |
par | Passive Aggressive Regressor | 2.2911 | 9.0001 | 2.9784 | 0.0897 | 0.2636 | 0.2401 | 0.0480 |
dummy | Dummy Regressor | 2.3369 | 10.0990 | 3.1743 | -0.0006 | 0.2871 | 0.2672 | 0.0990 |
- 可以发现,
gbr
模型的MSE
最低,效果最好。使用随机搜索,调整参数,迭代20次,最佳模型10折交叉检验结果。
Fold | MAE | MSE | RMSE | R2 | RMSLE | MAPE |
---|---|---|---|---|---|---|
0 | 1.5267 | 4.7045 | 2.1690 | 0.5536 | 0.1719 | 0.1519 |
1 | 1.4646 | 4.3281 | 2.0804 | 0.5695 | 0.1674 | 0.1447 |
2 | 1.5053 | 4.3746 | 2.0915 | 0.5534 | 0.1757 | 0.1562 |
3 | 1.4995 | 4.5526 | 2.1337 | 0.5466 | 0.1731 | 0.1512 |
4 | 1.5798 | 4.6405 | 2.1542 | 0.5627 | 0.1842 | 0.1652 |
5 | 1.3879 | 3.7092 | 1.9259 | 0,6079 | 0,1654 | 0,1462 |
6 | 1.5613 | 4.8066 | 2.1924 | 0,5326 | 0,1744 | 0,1508 |
7 | 1.4739 | 4.4213 | 2.1027 | 0,5899 | 0,1683 | 0,1440 |
8 | 1.4873 | 4.5554 | 2.1343 | 0,6052 | 0,1716 | 0,1502 |
9 | 1,4654 | 4,0750 | 2.0187 | 0,4792 | 0,1658 | 0,1471 |
Significar | 1,4952 | 4.4168 | 2.1003 | 0,5601 | 0,1718 | 0,1508 |
Padrão | 0,0515 | 0,3082 | 0,0748 | 0,0359 | 0,0053 | 0,0060 |
- Os parâmetros ideais são os seguintes:
Parâmetro | números |
---|---|
alfa | 0,9 |
ccp_alpha | 0,0 |
critério | fritoman_mse |
iniciar | Nenhum |
taxa de Aprendizagem | 0,1 |
perda | erro_quadrado |
profundidade máxima | 3 |
max_features | Nenhum |
max_leaf_nodes | Nenhum |
min_impurity_decrease | 0,0 |
min_samples_leaf | 1 |
min_samples_split | 2 |
min_weight_fraction_leaf | 0,0 |
n_estimadores | 100 |
n_iter_no_change | Nenhum |
estado_aleatório | 2023 |
subamostra | 1,0 |
para mim | 0,0001 |
validação_fração | 0,1 |
prolixo | 0 |
warm_start | Falso |
análise do modelo
- Analise o modelo e visualize alguns indicadores
Gráfico residual do modelo
- O modelo é R 2 R^2 no conjunto de treinamento e no conjunto de testeR2 não é muito diferente, indicando que não há fenômeno de overfitting
- O resíduo é distribuído uniformemente em ambos os lados da linha 0 e apresenta aleatoriedade
- A distribuição residual do modelo no conjunto de treinamento e no conjunto de teste é basicamente a mesma
Modelo de Curva de Aprendizagem
- Através da curva de aprendizado podemos julgar se o modelo apresenta fenômeno de overfitting, verificando-se que o conjunto de treinamento e o conjunto de verificação da figura acima estão convergindo para o valor médio, indicando que o modelo não participou do fenômeno de overfitting.
interpretação do modelo
- Este módulo usará o pacote SHAP, usando o valor de Shapley para avaliar o impacto dos recursos no modelo.
tente
- Podemos pegar uma amostra e visualizar seu processo de previsão, o código é o seguinte
# 取训练数据
X = s.get_config('X_train')
explainer = shap.TreeExplainer(model)
shap_values = explainer.shap_values(X)
shap.force_plot(explainer.expected_value, shap_values[0,:], X.iloc[0,:])
- 红色的代表特征贡献的正方向力(将预测推高),蓝色的表示特征贡献的负方向的力(将预测推低)
部分依赖图
- 为了解单个特征如何影响模型的输出以及特征间的交互作用,我们可以绘制部分依赖图
- 部分预测图遵照下列规则
- 每个点都是数据集中的一个样本
x
轴是特征的值(来自X矩阵,存储在shap_values.data
中)y
轴是该特征的SHAP值(存储在shap_values.values
中)。它表示了该特征的值会在多大程度上改变该样本预测的模型输出。对于这个模型,单位是Age
的对数赔率。- 散点图的颜色由另一个特征决定,如果不传入固定特征,则函数会挑选与分析特征交互最强的特征列(比如在下面与
Length
交互性最强的是Sex_F
)
- 我们绘制出除
Sex
独热编码后的其余列,并让函数自动选择与其交互性较强的特征
for name in X.columns:
if 'Sex' not in name:
shap.dependence_plot(name, shap_values, X)
- 由上图可知:
- 与
Length
交互性最强的是Sex_F
- 长度在1.25以上的雌性螃蟹年龄高于雄性和未知性别螃蟹
- 长度在1.00以下时,随着长度增加年龄也随着增加,但超过1.00以上时,长度增加年龄不一定增加
- 与
- 由上图可知:
- 与
Diameter
交互性最强的是Sex_M
- 螃蟹直径小于0.6时,直径越长,年龄越小。当直径在0.6~0.8时,直径越长,年龄越大,当直径超过0.8时,直径对年龄影响较小
- 直径在0.7以下时,雄性螃蟹年龄基本大于雌性和未知性别
- 与
- 由上图可知:
- 与
Height
交互性最强的是Length
- 螃蟹高度大于0.3时,长度大的螃蟹年龄更大
- 与
- 由上图可知:
- 与
Weight
交互性最强的是Sex_M
- 在重量相同时,雄性螃蟹年龄比雌性和未知性别年龄大
- 与
- 由上图可知:
- 与
Shucked Weight
交互性最强的是Diameter
- 当螃蟹不含壳的重量小于3时,重量越小,年龄越小。
- 去壳重量量越大,螃蟹直径越大
- 与
蜂群摘要图
- 蜂群图旨在显示数据集中的主要特征如何影响模型输出的信息密集摘要。
- 给定解释的每个实例都由每个特征流上的单个点表示。
- 点的 x 位置由该特征的 SHAP 值确定,点沿着每个特征行“堆积”以显示密度。颜色用于显示特征的原始值。
- 由上图可得以下结论:
Sheel Weight
O peso da casca ( ) é a característica mais importante em média , quanto maior o peso da casca, mais velho o caranguejo- Quanto mais leve for o peso sem casca (
Shucked Weight
), mais velho pode ser. Pesado sem peso de casca quase mais jovem Length
Quanto maior o comprimento ( ), menor a idade- Quanto menor o diâmetro (
Diameter
), mais jovem é quase - Masculino (
Sex_M
) e feminino (Sex_F
), mais velho que desconhecido (Sex_I
)