@@ -35,7 +35,15 @@ if (shap_enable || comp_enable) {
35
35
# shap values and comps based on the generated prediction for multi-card pins.
36
36
# More details in multi-card handling in the assess stage.
37
37
# https://github.com/ccao-data/model-res-avm/issues/358
38
- assessment_data <- assessment_data %> %
38
+
39
+ # Persist sort order
40
+ assessment_data_ordered <- assessment_data %> %
41
+ group_by(meta_pin ) %> %
42
+ arrange(desc(char_bldg_sf ), meta_card_num ) %> %
43
+ mutate(sqft_card_num_sort = row_number()) %> %
44
+ ungroup()
45
+
46
+ assessment_data <- assessment_data_ordered %> %
39
47
mutate(
40
48
char_bldg_sf = ifelse(
41
49
ind_pin_is_multicard & meta_pin_num_cards %in% c(2 , 3 ),
@@ -44,10 +52,11 @@ if (shap_enable || comp_enable) {
44
52
),
45
53
.by = meta_pin
46
54
)
55
+
47
56
# Run the saved recipe on the assessment data to format it for prediction
48
57
assessment_data_prepped <- recipes :: bake(
49
58
object = lgbm_final_full_recipe ,
50
- new_data = assessment_data ,
59
+ new_data = assessment_data % > % select( - sqft_card_num_sort ) ,
51
60
all_predictors()
52
61
)
53
62
}
@@ -91,16 +100,19 @@ if (shap_enable) {
91
100
select(
92
101
meta_year , meta_pin , meta_card_num ,
93
102
meta_pin_num_cards ,
94
- township_code = meta_township_code
103
+ township_code = meta_township_code ,
104
+ sqft_card_num_sort
95
105
) %> %
96
106
bind_cols(shap_values_tbl ) %> %
97
107
select(
98
- meta_year , meta_pin , meta_card_num ,
108
+ meta_year , meta_pin , meta_card_num , sqft_card_num_sort ,
99
109
meta_pin_num_cards , pred_card_shap_baseline_fmv ,
100
110
all_of(params $ model $ predictor $ all ), township_code
101
111
) %> %
102
112
group_by(meta_pin ) %> %
103
- arrange(desc(char_bldg_sf ), meta_card_num ) %> %
113
+ # Replicate sort used in the assess stage to ensure the same card's chars
114
+ # are used accross the assess stage and interpret stage
115
+ arrange(sqft_card_num_sort ) %> %
104
116
group_modify(~ {
105
117
shap_cols <- c(" pred_card_shap_baseline_fmv" , params $ model $ predictor $ all )
106
118
# If the first row indicates 2 or 3 cards,
@@ -154,7 +166,8 @@ if (comp_enable) {
154
166
155
167
# Filter target properties for only the current triad, to speed up the comps
156
168
# algorithm
157
- comp_assessment_data_preprocess <- assessment_data %> % filter(
169
+ comp_assessment_data_preprocess <- assessment_data %> %
170
+ filter(
158
171
meta_township_code %in% (
159
172
ccao :: town_dict %> %
160
173
filter(triad_name == tools :: toTitleCase(params $ assessment $ triad )) %> %
@@ -172,7 +185,7 @@ if (comp_enable) {
172
185
173
186
selected_cards <- multicard_props %> %
174
187
group_by(meta_pin ) %> %
175
- arrange(desc( char_bldg_sf ), meta_card_num ) %> %
188
+ arrange(sqft_card_num_sort ) %> %
176
189
slice(1 ) %> %
177
190
ungroup()
178
191
0 commit comments