Possibly you need to use only 4 columns and index them like so:
cm = 1/2.54
fig = plt.figure(figsize=(15*cm, 27*cm), constrained_layout=True)
fontsize = 10
gs = gridspec.GridSpec(3, 4, height_ratios=[1, 1, 1])
# First row, two subplots
ax1 = fig.add_subplot(gs[0, 1:3])
ax2 = fig.add_subplot(gs[1, 0:2])
ax3 = fig.add_subplot(gs[1, 2:])
ax4 = fig.add_subplot(gs[2, 0:2])
ax5 = fig.add_subplot(gs[2, 2:])
This gives me:
You could then play around with the figure size to get the subplot aspect ratio that you want.