Quantium Assessment Test Analysis
Quantium Assessment Test Analysis
Natural Chip
2018-
0 1000 1 1 5 Compny
10-17
SeaSalt175g
Grain Waves
2019- Sour
2 1003 1 3 52
03-07 Cream&Chives
210G
Natural ChipCo
2019-
3 1003 1 4 106 Hony Soy
03-08
Chckn175g
WW Original
2018-
4 1004 1 5 96 Stacked Chips
11-02
160g
Grain Waves
2018-
264829 2370701 88 240378 24 Sweet Chilli
12-08
210g
Kettle Tortilla
2018-
264830 2370751 88 240394 60 ChpsFeta&Garlic
10-01
150g
Tyrrells Crisps
2018-
264831 2370961 88 240480 70 Lightly Salted
10-24
165g
Old El Paso
2018-
264832 2370961 88 240481 65 Salsa Dip Chnky
10-27
Tom Ht300g
Smiths Crinkle
2018-
264833 2373711 88 241815 16 Chips Salt &
12-14
Vinegar 330g
In [258… dataset["DATE"].dtype
Out[258… dtype('O')
Out[259… 0 10/2018
1 09/2018
2 03/2019
3 03/2019
4 11/2018
...
264829 12/2018
264830 10/2018
264831 10/2018
264832 10/2018
264833 12/2018
Name: MONTH_YEAR, Length: 264834, dtype: object
Out[261… STORE_NBR
1 2393.60
2 2005.80
3 12802.45
4 14647.65
5 9500.80
...
268 2601.05
269 11221.80
270 11293.95
271 9721.80
272 4653.95
Name: TOT_SALES, Length: 272, dtype: float64
Out[262… STORE_NBR
77 3040.00
78 9381.25
79 11831.20
80 11756.90
81 14361.95
82 4103.50
83 9924.90
84 5396.30
85 13.90
86 10635.35
87 3991.60
88 16333.25
Name: TOT_SALES, dtype: float64
NOW SINCE WE HAVE THE TOTAL SALES FOR THE TRIAL STORES. LETS LOOK FOR
MATCHING CONTROL STORES FOR EACH. THERE ARE 272 STORES. I WILL USE 2
METHODS TO DETERMINE A CONTROL STORE. I WILL FIRST GO BY TOTAL SALES TO FIND
STORES WITH SIMILAR TOTAL SALES. THEN I WILL USE THE PEARSON CORRELATIONS
TEST TO DETERMINE HOW CORRELATED THE STORES ARE.
Out[263… STORE_NBR
41 2570.20
268 2601.05
195 2608.25
163 2635.70
6 2684.90
53 2715.05
214 2720.40
176 2752.90
233 2826.90
255 2835.30
185 2868.60
187 2909.70
205 2966.80
220 3008.20
50 3009.80
46 3023.45
141 3025.40
77 3040.00
Name: TOT_SALES, dtype: float64
In [264… stores_control_one = [41, 268, 195, 163, 6, 53, 214, 176, 233, 255, 185, 187, 20
control_one = [Link]({"Value" : total_grp[stores_control_one]})
print(control_one)
Value
STORE_NBR MONTH_YEAR
41 01/2019 169.0
02/2019 234.6
03/2019 226.2
04/2019 231.3
05/2019 258.8
... ...
77 08/2018 255.5
09/2018 225.2
10/2018 204.5
11/2018 245.3
12/2018 267.3
MONTH_YEAR
01/2019 191.1 169.0 176.20 223.9 172.90 204.4 340.3 208.9 187.2 261.1 184
02/2019 224.0 234.6 222.40 154.5 179.10 235.0 246.7 182.0 248.7 217.8 246
03/2019 179.5 226.2 259.20 227.0 225.80 278.5 241.7 268.8 246.4 245.3 247
04/2019 197.9 231.3 260.00 242.4 227.80 263.5 186.2 198.3 227.4 283.6 240
05/2019 257.3 258.8 243.55 219.5 272.35 299.3 194.9 233.8 289.5 314.6 218
06/2019 207.4 237.7 280.30 270.8 198.90 264.7 238.4 240.3 269.3 222.8 255
07/2018 260.0 216.4 253.00 314.4 229.80 296.8 272.8 188.6 287.2 225.6 253
08/2018 203.2 209.8 240.70 292.4 255.10 255.5 225.3 183.1 147.1 276.3 214
09/2018 207.7 216.1 233.00 258.8 188.00 225.2 232.8 269.5 195.4 196.9 276
10/2018 292.4 156.5 275.10 252.8 238.90 204.5 276.2 178.0 246.0 216.1 181
11/2018 255.3 199.3 273.10 222.1 223.80 245.3 244.3 261.8 177.1 202.3 327
12/2018 209.1 214.5 306.90 331.2 302.60 267.3 325.8 222.6 231.6 206.2 264
In [266… pivot_chips1.plot()
[Link](loc = "upper right", bbox_to_anchor = (1.20, 1))
[Link]("Sales")
[Link]()
THAT'S AN UGLY LOOKING LINE CHART. LETS TAKE A CLOSER LOOK AT THE
CORRELATIONS BETWEEN THEM AND RECHART JUST THE TWO.
LOOKING AT CORRELATION
In [267… pivot_chips1.corr(method="pearson")
STORE_NBR
STORE 41 AND 77 HAS HAS THE STRONGEST CORRELATION AT 0.762. LETS GRAPH IT.
Out[269… STORE_NBR
31 1.000000
77 1.000000
11 1.000000
41 0.762292
35 0.699708
167 0.696075
184 0.645118
63 0.633858
234 0.632204
20 0.620701
Name: 77, dtype: float64
THESE ARE THE TOP 10 CORRELATIONS TO STORE 77. STORE 41 WOULD BE RANKED IN
3RD PLACE. LETS LOOK AT THE OTHER STORES BY TOTAL SALES BEFORE I MAKE A
DECISION.
In [270… # GRABBING THE TOTAL SALES SORTED SERIES TO SEE HOW THE SALES STACK UP FOR THE T
total_sorted.loc[[31, 11, 41, 35]]
Out[270… STORE_NBR
31 14.8
11 6.7
41 2570.2
35 1608.9
Name: TOT_SALES, dtype: float64
# MAKING DATAFRAME
amigos_77_df = [Link](three_amigos_77)
FOR TRIAL STORE 77, I WILL USE STORE NUMBER 41 AS A CONTROL STORE. IT'S A 0.76
CORRELATION.
In [272… total_sorted.iloc[178:201]
Out[272… STORE_NBR
109 10399.10
191 10404.70
196 10408.20
229 10417.90
97 10432.05
102 10440.70
105 10472.50
232 10485.30
57 10532.30
172 10545.60
113 10551.60
225 10566.60
62 10583.10
236 10621.00
227 10622.50
155 10628.95
86 10635.35
247 10651.50
13 10686.50
164 10718.90
106 10742.60
55 10760.15
138 10824.80
Name: TOT_SALES, dtype: float64
In [273… stores_control_two = [109, 191, 196, 229, 97, 102, 105, 232, 57, 172, 113, 225,
control_two = [Link]({"Value" : total_grp[stores_control_two]})
print(control_two)
Value
STORE_NBR MONTH_YEAR
109 01/2019 858.6
02/2019 858.4
03/2019 1039.2
04/2019 728.6
05/2019 720.6
... ...
138 08/2018 707.4
09/2018 913.6
10/2018 1015.4
11/2018 991.4
12/2018 918.0
MONTH_YEAR
01/2019 927.0 1003.20 852.8 887.8 841.40 844.60 898.0 807.0 869.60 8
02/2019 868.0 757.80 919.8 864.4 913.20 755.20 773.4 751.8 833.20 8
03/2019 1035.6 943.60 807.4 889.8 1026.80 853.60 821.8 916.8 938.60 10
04/2019 1024.4 851.80 900.0 885.2 848.20 813.00 718.6 944.6 815.40 7
05/2019 803.2 736.85 846.7 754.9 889.30 883.30 890.9 818.1 878.75 7
06/2019 840.6 999.60 911.0 846.8 838.00 862.00 950.0 835.0 690.20 8
07/2018 811.8 889.60 839.6 983.6 892.20 848.20 782.4 928.9 1042.80 8
08/2018 756.9 910.30 915.4 792.4 764.05 917.35 986.4 923.7 799.85 8
09/2018 840.0 1028.80 792.8 972.8 914.60 908.80 970.4 846.6 1158.40 8
10/2018 851.0 1024.40 965.8 840.2 948.40 993.20 902.2 880.0 928.60 9
11/2018 1049.4 779.80 830.0 952.8 918.00 853.40 930.0 771.4 966.80 9
12/2018 878.6 834.40 951.0 912.4 841.20 899.40 816.6 1048.6 820.40 9
12 rows × 23 columns
In [275… pivot_chips2.plot()
[Link](loc = "upper right", bbox_to_anchor = (1.20, 1))
[Link]("Sales")
[Link]()
THAT'S AN UGLY LOOKING LINE CHART. LETS TAKE A CLOSER LOOK AT THE
CORRELATIONS BETWEEN THEM AND RECHART JUST THE TWO.
LOOKING AT CORRELATION
In [276… pivot_chips2.corr(method="pearson")
STORE_NBR
23 rows × 23 columns
STORE 109 AND 86 HAS HAS THE STRONGEST CORRELATION AT 0.643. LETS GRAPH IT.
In [278… total_grp_pivot_table[86].sort_values(ascending=False).head(10)
Out[278… STORE_NBR
31 1.000000
86 1.000000
193 0.933364
159 0.675773
231 0.674071
109 0.643075
132 0.629011
260 0.623775
61 0.617243
229 0.596886
Name: 86, dtype: float64
THESE ARE THE TOP 10 CORRELATIONS TO STORE 86. STORE 109 WOULD BE RANKED IN
5TH PLACE. LETS LOOK AT THE OTHER STORES BY TOTAL SALES BEFORE I MAKE A
DECISION.
In [279… # GRABBING THE TOTAL SALES SORTED SERIES TO SEE HOW THE SALES STACK UP FOR THE T
total_sorted.loc[[31, 193, 159, 231, 109]]
Out[279… STORE_NBR
31 14.8
193 13.1
159 338.9
231 12996.0
109 10399.1
Name: TOT_SALES, dtype: float64
STORE 31, 159, & 193 SALES ARE WAY TOO LOW TO USE.
# MAKING DATAFRAME
amigos_86_df = [Link](three_amigos_86)
STORE 231 EVEN THOUGH IT HAS A GOOD CORRELATION STORE 109 IS A MUCH
BETTER FIT. STORE 31 EVEN THOUGH is A BEST MATCH CORRELATION WISE IT DOES
NOT MAKE SENSE WITH SALES VOLUME. SO I WILL GO WITH STORE 41.
FOR TRIAL STORE 86, I WILL USE STORE NUMBER 109 AS A CONTROL STORE. IT'S A
0.643 CORRELATION.
Out[281… STORE_NBR
206 1.000000
88 1.000000
159 0.862608
193 0.836296
201 0.737583
188 0.733516
229 0.707309
228 0.697039
61 0.686658
140 0.613791
Name: 88, dtype: float64
THESE ARE THE TOP 10 CORRELATIONS TO STORE 88. LETS LOOK AT THE OTHER STORES
BY TOTAL SALES BEFORE I MAKE A DECISION.
In [282… # GRABBING THE TOTAL SALES SORTED SERIES TO SEE HOW THE SALES STACK UP FOR THE T
total_sorted.loc[[206, 88, 159, 193, 201, 188, 229, 228, 61, 140]]
Out[282… STORE_NBR
206 7.60
88 16333.25
159 338.90
193 13.10
201 14298.70
188 3086.00
229 10417.90
228 4236.30
61 562.90
140 244.90
Name: TOT_SALES, dtype: float64
STORE 206, 159, 188, 228, 61, 140, & 193 SALES ARE WAY TOO LOW TO USE.
# MAKING DATAFRAME
amigos_88_df = [Link](three_amigos_88)
Out[295… np.float64(0.7375831241350634)
STORE 229 EVEN THOUGH IT HAS A GOOD CORRELATION STORE 201 IS A MUCH
BETTER FIT. STORE 206 EVEN THOUGH is A BEST MATCH CORRELATION WISE IT DOES
NOT MAKE SENSE WITH SALES VOLUME. SO I WILL GO WITH STORE 201.
FOR TRIAL STORE 88, I WILL USE STORE NUMBER 201 AS A CONTROL STORE. IT'S A
0.737 CORRELATION.
trial_store_77
2018-
73367 77000 77 74910 36 Kettle Chilli 175g
09-26
Kettle Tortilla
2019-
73369 77001 77 74914 9 ChpsBtroot&Ricotta
01-21
150g
Sunbites Whlegrn
2018-
264819 2330331 77 236760 95 Crisps Frch/Onin
11-18
90g
Out[ ]: LYLTY_CARD_NBR
77476 5
77109 4
77205 4
77066 4
77093 4
..
77023 1
77024 1
77025 1
77187 1
77003 1
Name: count, Length: 356, dtype: int64
Out[305… LYLTY_CARD_NBR
41497 4
41453 4
41466 4
41367 4
41359 4
..
41471 1
41499 1
41002 1
41001 1
41505 1
Name: count, Length: 344, dtype: int64
repeats_total = 24
LYLTY_CARD_NBR
77476 5
77109 4
77205 4
77066 4
77093 4
77305 4
77313 4
77338 4
77344 4
77454 4
77206 3
77102 3
77480 3
77238 3
77136 3
77044 3
77207 3
77111 3
77080 3
77114 3
77049 3
77077 3
77263 3
77069 3
Name: count, dtype: int64
repeats_total_two = 9
LYLTY_CARD_NBR
41497 4
41453 4
41466 4
41367 4
41359 4
41368 4
41418 4
41423 4
41432 4
Name: count, dtype: int64
FOR THE FIRST PAIR WE CAN SEE A CLEAR DIFFERENCE BETWEEN THE TRIAL STORE AND
THE CONTROL STORE. LETS LOOK AT THE NEXT PAIR OF STORES.
Out[313… LYLTY_CARD_NBR
86133 13
86112 13
86151 12
86075 12
86008 12
..
155000 1
155003 1
155004 1
155005 1
155510 1
Name: count, Length: 273, dtype: int64
Out[316… LYLTY_CARD_NBR
86133 13
86112 13
86151 12
86075 12
86008 12
..
86208 6
86030 6
86031 6
86028 6
86016 6
Name: count, Length: 125, dtype: int64
Out[317… LYLTY_CARD_NBR
109036 16
109080 14
109086 13
109078 12
109212 12
..
109121 1
109017 1
109200 1
109214 1
109222 1
Name: count, Length: 261, dtype: int64
Out[319… LYLTY_CARD_NBR
109036 16
109080 14
109086 13
109078 12
109212 12
..
109075 6
109066 6
109065 6
109148 6
109113 6
Name: count, Length: 115, dtype: int64
FOR THE SECOND PAIR WE CAN SEE A CLEAR DIFFERENCE BETWEEN THE TRIAL STORE
AND THE CONTROL STORE. LETS LOOK AT THE NEXT PAIR OF STORES.
Out[325… LYLTY_CARD_NBR
88105 13
88247 11
88358 11
88351 10
88348 10
..
88355 1
88372 1
2370701 1
2370751 1
2373711 1
Name: count, Length: 388, dtype: int64
Out[327… LYLTY_CARD_NBR
88105 13
88247 11
88358 11
88351 10
88348 10
..
88218 6
88134 6
88194 6
88188 6
88181 6
Name: count, Length: 146, dtype: int64
Out[328… LYLTY_CARD_NBR
201294 13
201120 11
201186 11
201206 10
201018 10
..
201057 1
201037 1
201043 1
201356 1
201005 1
Name: count, Length: 376, dtype: int64
Out[330… LYLTY_CARD_NBR
109036 16
109080 14
109086 13
109078 12
109212 12
..
109202 6
109095 6
109077 6
109073 6
109074 6
Name: count, Length: 110, dtype: int64
FOR THE THIRD PAIR WE CAN SEE A CLEAR DIFFERENCE BETWEEN THE TRIAL STORE
AND THE CONTROL STORE. LETS LOOK AT THE NEXT PAIR OF STORES.
AS WE CAN SEE BY THE GRAPHS ABOVE THE TRIAL STORES OUTPERFORMED THE
CONTROL STORES BY QUANTITY SOLD.
LETS SEE HOW THEY STACK UP WITH AVERAGE TRANSACTIONS PER CUSTOMER
In [336… grouped77["LYLTY_CARD_NBR"].value_counts().mean()
Out[336… np.float64(1.048417132216015)
In [337… grouped41["LYLTY_CARD_NBR"].value_counts().mean()
Out[337… np.float64(1.05)
In [338… grouped86["LYLTY_CARD_NBR"].value_counts().mean()
Out[338… np.float64(1.2544861337683524)
In [339… grouped109["LYLTY_CARD_NBR"].value_counts().mean()
Out[339… np.float64(1.2918454935622317)
In [340… grouped88["LYLTY_CARD_NBR"].value_counts().mean()
Out[340… np.float64(1.2363036303630364)
In [341… grouped201["LYLTY_CARD_NBR"].value_counts().mean()
Out[341… np.float64(1.1689045936395759)
[Link]("PROD_QTY")
[Link](loc = "upper right", bbox_to_anchor = (1.3, 1))
[Link]("Average products per customer Trial Period")
[Link]()
AS WE CAN SEE THE AVERAGE TRANSACTIONS WERE SLIGHTLY HIGHER FOR 1 OF THE 3
TRIAL STORES.
I BELIEVE THE NEW LAYOUT IS WORKING TO INCREASE SALES. SALES, PRODUCTS SOLD,
AMOUNT OF REPEAT CUSTOMERS AND AVERAGE TRANSACTIONS PER CUSTOMER ALL
SHOW SIGNS THATS THE TRIAL STORES ARE OUTPERFORMING THE CONTROL STORES.