Faits : A. A.a. En 1998, la société lausannoise A._ SA s'est intéressée à prendre en location des locaux commerciaux sis à Lausanne, qui appartenaient alors à une compagnie d'assurance. La société précitée envisageait de procéder à d'importantes transformations de ces locaux pour un montant de 1'500'000 à 2'000'000 fr. Les discussions avec la gérance représentant la propriétaire ont porté sur le loyer et la prise en charge par la propriétaire d'une partie des futurs travaux. Le 16 juin 1998, la gérance a fait la proposition suivante pour le nouveau loyer: "Loyer de base, soit prix moyen au m2 de Fr. 259.80 Fr. 510'000.- Diminution pour rentabilisation de Fr. 1'200'000.- (...) sur 15 ans, renté à 4,5% Fr. 111'600.- _ Valable du 01.10.98 au 30.09.2013 Fr. 398'400.- Dès le 01.10.2013, le loyer sera ramené au loyer initial net de Fr. 510'000.-, basé sur un IPC de septembre 1998 indexé à l'IPC de septembre 2013. (...) ". A.b. Le 22 juillet 1998, A._ SA, en qualité de locataire, a signé avec la propriétaire de l'immeuble un contrat de bail pour locaux commerciaux portant sur une surface de 1'963 m 2et prenant effet le 1 er octobre 1998. Le loyer annuel net était de 375'000 fr. (31'250 fr. par mois); une adaptation entière à l'indice des prix à la consommation (IPC) était prévue. Le bail était résiliable moyennant avis donné douze mois à l'avance pour fin septembre, mais au plus tôt pour le 30 septembre 2013; à défaut, le bail était reconduit tacitement de cinq ans en cinq ans. Un document intitulé "Clauses particulières" a été signé le même jour et joint au contrat de bail. Il prévoyait notamment: "Dès le 01.10.2013, le loyer sera ramené au loyer initial net de Fr. 510'000.-, basé sur un IPC du 30 septembre 2007 indexé à l'IPC du 30 septembre 2013. Le loyer annuel ne pourra toutefois pas être inférieur au montant initial de Fr. 510'000.-." Le 15 octobre 1999, la société zurichoise B._ AG est devenue propriétaire de l'immeuble, et partant bailleresse. A neuf reprises, elle a augmenté le loyer en fonction de l'IPC pour finalement le porter à 427'416 fr. dès le 1 er janvier 2009. La locataire a contesté cette dernière hausse par voie judiciaire avant de communiquer au Tribunal des baux du canton de Vaud qu'elle l'acceptait; par prononcé du 14 juillet 2009, le Tribunal en a pris acte en tant que déclaration de passé-expédient. A.c. Par formule officielle du 16 novembre 2010, la bailleresse a résilié le contrat de bail pour le 30 septembre 2013. La locataire a contesté le congé devant la Commission de conciliation, qui a prononcé son annulation le 31 janvier 2012. La bailleresse a alors déposé une demande en validation du congé devant le Tribunal des baux. La procédure est encore pendante. A.d. Par lettre du 19 janvier 2012 adressée à la bailleresse, la locataire a requis une diminution de loyer dès le 1 er octobre 2013. Relevant que le taux hypothécaire était de 4,25% lors de la conclusion du contrat et de 2,5% depuis décembre 2011, elle estimait que cet écart de 1,75% justifiait une baisse de loyer de 20,37%. Elle alléguait en outre que le loyer actuel procurait un rendement excessif à la bailleresse. Elle demandait que le loyer initial de 375'000 fr. soit réduit de 20,37% (- 76'387 fr. 50), et donc ramené à 298'612 fr. 50 dès le 1 er octobre 2013. Le 7 mars 2012, la locataire a saisi la Commission de conciliation d'une requête en réduction de loyer fondée sur la baisse du taux hypothécaire de référence et sur un rendement excessif procuré à la bailleresse. La conciliation a échoué. B. B.a. La locataire a porté l'action devant le Tribunal des baux, concluant à la réduction du loyer annuel à 287'000 fr. dès le 1 er octobre 2013. A l'appui de sa demande, elle invoquait le rendement excessif et la baisse du taux hypothécaire de référence de 4,25% à 2,25%. La bailleresse a conclu au rejet. Lors de l'audience du 15 novembre 2013, la locataire a modifié sa conclusion dans le sens que le loyer annuel net devait être réduit à 276'787 fr.; elle a précisé que la demande était fondée sur la méthode dite relative et, uniquement à titre superfétatoire, sur la méthode absolue du rendement net. La bailleresse a confirmé sa conclusion en rejet de la demande. Par jugement du 2 décembre 2013, le Tribunal des baux a fixé le loyer annuel net dû dès le 1 er octobre 2013 à 375'000 fr., soit le montant initial convenu. Le tribunal a fait le raisonnement suivant: la clause d'indexation prévue dans le contrat de bail était valable à partir du 1 er octobre 2013 seulement, de sorte que les hausses intervenues jusqu'alors étaient nulles. La bailleresse ne pouvait opposer à la locataire la clause selon laquelle le loyer serait au minimum de 510'000 fr. à compter du 1 er octobre 2013; en effet, la locataire avait le droit impératif de demander une baisse de loyer lorsque les conditions légales étaient remplies. Pour le calcul du loyer, il n'était pas possible d'invoquer simultanément les méthodes relative et absolue; seule la méthode relative, invoquée à titre principal par la locataire, était donc déterminante. A défaut d'indications sur les paramètres nécessaires, il fallait toutefois retenir que les parties voulaient régler la question du loyer jusqu'à la date d'expiration du bail et ne pouvaient donc pas invoquer la méthode relative pour fixer le loyer admissible à cette date. La conclusion en baisse de loyer devait donc être rejetée. Quant à la bailleresse, elle n'avait pas notifié une hausse de loyer à 510'000 fr. au moyen de la formule officielle, si bien que cette modification n'était pas entrée en vigueur. B.b. La locataire et la bailleresse ont fait appel, concluant à ce que le loyer soit fixé à 293'137 fr. 50, respectivement à 427'416 fr. Par arrêt du 5 novembre 2014, la Cour d'appel civile du Tribunal cantonal vaudois a rejeté l'appel de la locataire et intégralement admis celui de la bailleresse, fixant le loyer annuel net à 427'416 fr. à partir du 1 er octobre 2013. La Cour d'appel a jugé que les parties avaient conclu un bail avec une clause d'échelonnement prévoyant un premier échelon de quinze ans avec un loyer de 375'000 fr., puis un second échelon de cinq ans avec un loyer de 510'000 fr. Elle en a conclu qu'une baisse de loyer était exclue durant cette période de vingt ans. L'indexation du loyer durant cet intervalle était également impossible, eu égard à l'interdiction de cumuler une clause d'échelonnement avec une clause d'indexation. La bailleresse aurait dû notifier une hausse de loyer correspondant au nouvel échelon de loyer pour le 1 er octobre 2013, ce qu'elle avait omis de faire, probablement parce qu'elle avait résilié le bail. Le loyer n'avait donc pas pu passer à 510'000 fr. La locataire ayant toutefois passé expédient en 2009 pour le loyer de 427'416 fr., il y avait lieu d'admettre une adaptation consensuelle du loyer. La Cour d'appel en a conclu que le loyer devait rester fixé à ce dernier montant. C. La locataire (recourante) a interjeté un recours en matière civile auprès du Tribunal fédéral. Elle conclut à ce que le loyer annuel net dû dès le 1 er octobre 2013 soit fixé à 293'137 fr. 50. La bailleresse (intimée) conclut au rejet du recours. Recourante et intimée ont déposé une seconde écriture. L'autorité précédente s'est référée à son arrêt.