Skip to content

Instantly share code, notes, and snippets.

View hassanj47's full-sized avatar

Hassan Javed hassanj47

  • Lahore
View GitHub Profile
id item_id dept_id cat_id store_id state_id d_1 d_2 d_3 d_4 d_5 d_6 d_7 d_8 d_9 d_10 d_11 d_12 d_13 d_14 d_15 d_16 d_17 d_18 d_19 d_20 d_21 d_22 d_23 d_24 d_25 d_26 d_27 d_28 d_29 d_30 d_31 d_32 d_33 d_34 d_35 d_36 d_37 d_38 d_39 d_40 d_41 d_42 d_43 d_44 d_45 d_46 d_47 d_48 d_49 d_50 d_51 d_52 d_53 d_54 d_55 d_56 d_57 d_58 d_59 d_60 d_61 d_62 d_63 d_64 d_65 d_66 d_67 d_68 d_69 d_70 d_71 d_72 d_73 d_74 d_75 d_76 d_77 d_78 d_79 d_80 d_81 d_82 d_83 d_84 d_85 d_86 d_87 d_88 d_89 d_90 d_91 d_92 d_93 d_94 d_95 d_96 d_97 d_98 d_99 d_100 d_101 d_102 d_103 d_104 d_105 d_106 d_107 d_108 d_109 d_110 d_111 d_112 d_113 d_114 d_115 d_116 d_117 d_118 d_119 d_120 d_121 d_122 d_123 d_124 d_125 d_126 d_127 d_128 d_129 d_130 d_131 d_132 d_133 d_134 d_135 d_136 d_137 d_138 d_139 d_140 d_141 d_142 d_143 d_144 d_145 d_146 d_147 d_148 d_149 d_150 d_151 d_152 d_153 d_154 d_155 d_156 d_157 d_158 d_159 d_160 d_161 d_162 d_163 d_164 d_165 d_166 d_167 d_168 d_169 d_170 d_171 d_172 d_173 d_174 d_175 d_176 d_177 d_178 d_179 d_180 d_181 d_
@hassanj47
hassanj47 / ts_survival_kmf.py
Created June 6, 2022 00:32
kmf for time series survival model
# loop over each department type, fit KMF and visualize
fig, ax = plt.subplots(1,1,figsize=(10,8))
kmf = KaplanMeierFitter()
depts = ['HOBBIES', 'FOODS']
for dept in depts:
depts_list = [d for d in results.dept_id.unique()\
if d.startswith(dept)]
res_depts = results[results.dept_id.isin(depts_list)]
kmf.fit(res_depts.thresh_week[:STUDY_END_WEEKS],\
res_depts.event[:STUDY_END_WEEKS])
@hassanj47
hassanj47 / ts_survival_prophet.py
Created June 6, 2022 00:31
prophet model for time series survival analysis
def build_prophet(df):
'''Build prophet model and generate events for survival modelling.'''
# prepping data for prophet assuming data starts from Jan, 2015
df['ds'] = pd.date_range(start='2015-01-01', periods=len(df))
df['y'] = df.sales
df = df[['ds','y']]
# train/test splits
train = df[:-TEST_DAYS]
test = df[-TEST_DAYS:]
@hassanj47
hassanj47 / ts_survival_utils.py
Created June 6, 2022 00:25
Utils for survival analysis of time series models
def survival_mape_exp(df, win_size):
'''Calculate expanding window mape for survival analysis.'''
df['ape'] = np.abs((df['yhat'] - df['y'])/df['y'])*100
df['exp_mape'] = df.ape.expanding(win_size).mean()
df['survival_metric'] = df['exp_mape']
return df
def survival_events(results):
'''Generate events and censors for survival analysis.'''
@hassanj47
hassanj47 / ts_survival_preprocess.py
Last active June 6, 2022 20:38
preprocessing for time series survival model
# Filtering the departments in config
sales = sales[sales.dept_id.isin(DEPTS)]
# sort data
sales = sales.sort_values(by=['item_id', 'dept_id', 'cat_id', 'store_id',
'state_id'])
# melting sales columns into one column
index_columns = ['id','item_id','dept_id','cat_id','store_id','state_id']
sales = pd.melt(sales,
id_vars = index_columns,
var_name = 'd',
@hassanj47
hassanj47 / ts_survival_config.py
Last active June 6, 2022 20:36
Configuration for time series survival model
# CONFIG
TRAIN_END = 'd_1913'
DEPTS = ['HOBBIES_1', 'HOBBIES_2', 'FOODS_1','FOODS_2', 'FOODS_3']
STORES = ['CA_1' ,'CA_2', 'CA_3', 'CA_4', 'TX_1', 'TX_2', 'TX_3', 'WI_1',
'WI_2', 'WI_3']
THRESH = 10 # MAPE threshold
TEST_DAYS = 365
FORECAST_DAYS = 365
WIN_SIZE_WEEKS = 4 # For expanding MAPE
STUDY_START_WEEKS = WIN_SIZE_WEEKS
@hassanj47
hassanj47 / keybase.md
Last active January 21, 2020 18:29
keybase.md

Keybase proof I hereby claim: * I am hassanj47 on github.

  • I am hassanjaved (https://keybase.io/hassanjaved) on keybase.
  • I have a public key ASA1rQBfK9DJXZDWbDbW_jYQMvuHSxLPqD81uSGzniz1LAoTo claim this, I am signing this object:

json { "body": { "key": { "eldest_kid": "012035ad005f2bd0c95d90d66c36d6fe361032fb874b12cfa83f35b921b39e2cf52c0a", "host": "keybase.io",