Как разработать программу для выполнения сложных финансовых расчетов с помощью .NET

Хорошо, я надеюсь, что это не слишком широкий вопрос, но мое любопытство взяло верх надо мной. Я работаю в крупной страховой компании. Мы создаем электронные таблицы Excel, которые обрабатывают прогноз будущей денежной стоимости полисов страхования жизни. Это довольно большие книги (40-50 МБ) с кучей листов и столбцов, которые должны учитывать огромное количество переменных, чтобы точно спрогнозировать денежные значения.

Как бы это было построено как настольное или бизнес-приложение? Я знаю .net довольно хорошо для новичка, но у меня возникают проблемы с мышлением, выходящим за рамки электронных таблиц, и с тем, как вы можете применить .net к чему-то подобному. Как бы вы отследили расчет в коде, который занимает 3 или 4 страницы с 60 столбцами по 1300 строк в каждой электронной таблице? А также изменение процентных ставок, сборов и других вещей, влияющих на политику, динамически основанных на таких входных данных, как возраст, пол, курильщик/некурильщик и т. д.


person Dcritelli    schedule 08.07.2009    source источник


Ответы (8)


Могу поспорить, что ваша компания зарабатывает более 1 миллиарда долларов в год, и все это основано на электронной таблице Excel. Вы не одиноки в этом.

Я бы начал с размышлений о проблеме, а не о таблице Excel. В чем проблема бизнеса? Можете ли вы смоделировать его с помощью объектов? Я вижу несколько объектов: Политика со всеми сопутствующими ей покрытиями и дочерними классами; Застрахован, с такими характеристиками, как пол, курение и т. д. - вы поняли.

Прогноз звучит так, как будто у вас будет несколько переменных «что, если» с некоторыми статистическими свойствами, которые вы будете варьировать. Ваша работа будет состоять в том, чтобы запускать множество симуляций, подобных Монте-Карло, которые изменяют переменные, используя выборку и вычисляя выходные данные. Ваш результат будет прогнозируемым средним значением со стандартным отклонением и уровнем достоверности.

Может быть хорошим кандидатом для массивных параллельных вычислений.

Что лежит в основе расчетов? Можете поделиться известными моделями? Может быть, это дало бы подсказку.

person duffymo    schedule 08.07.2009
comment
Это очень близко к тому, как вы описали. Есть 3 листа: один с реалистичными оценочными ставками, один с гарантированными ставками, которые обычно немного выше, а затем третий, который усредняет их. Другие листы связаны с кредитами и соблюдением налогового кодекса. - person Dcritelli; 09.07.2009

Также следите за тем, чтобы не использовать числа с плавающей запятой или двойные числа для расчетов, связанных с деньгами. Используйте десятичную дробь.

person Jared Updike    schedule 08.07.2009

Это действительно простой вопрос... со сложным ответом.

Вы спрашиваете: как я могу спланировать сложный программный проект?

Знайте свое окружение (как вы говорите):

Знать программную инженерию:

Знайте свой язык/среду разработки:


  1. Первый шаг — выяснить, как вы работаете в качестве разработчика.
  2. Спланируйте шаги, которые вы будете или могли бы предпринять.
  3. Упростите все до МИНИМУМА.
  4. Пересмотрите свой список того, что нужно сделать.
  5. Смоделируйте это.
  6. Do it.

Если вы нервничаете перед началом, я бы создал простой функциональный прототип. Начните с визуализации проекта в чем-то вроде Мокапы Balsamiq, чтобы вы могли увидеть, как будет выглядеть каждый фрагмент головоломки. собраться вместе.

Если вы потратите несколько дней на изучение методов разработки программного обеспечения, вы сэкономите себе часы и часы головной боли. Начните с передового опыта, подаренного нам теми альфа-компьютерщиками, которые уже сделали то, что вы пытаетесь сделать.

person Jeremiah    schedule 08.07.2009

SpreadsheetGear для .NET позволит вам использовать модели Excel непосредственно в приложениях .NET без использования Excel и без дополнительных затрат. много времени уходит на преобразование в C# или VB каждый раз, когда деловые люди хотят обновить модель.

Вы можете загрузить бесплатную пробную версию здесь, если хотите попробовать ее самостоятельно.

Отказ от ответственности: я владею SpreadsheetGear LLC

person Joe Erickson    schedule 10.07.2009
comment
+1. Для полноты картины следует рассмотреть KDCalc. Отказ от ответственности: я не работаю в Spreadsheet Gear или Knowledge Dynamics (KDCalc). - person RichardOD; 11.07.2009

Вам придется разбирать все по частям и начинать с проектирования базы данных. Подумайте о базовых таблицах. Вы можете просмотреть каждый лист в Excel и подумать, как бы он выглядел, если бы вы взяли связанную информацию и поместили ее в таблицу базы данных.

Представления базы данных отлично подходят для выполнения базовых математических операций, поскольку они могут выполнять вычисления на основе множества таблиц и представлять результаты в удобном формате.

person Jon Onstott    schedule 08.07.2009

Вот подход, который я бы выбрал:

  • Храните свои данные (материал на 3-4 страницах с 60 столбцами/1300 строками) в БД или другом хранилище данных.
  • Выполняйте вычисления, используя функции БД (выберите сумму (foo) из blah;), временные таблицы, массивы в памяти, что угодно
  • Сохраняйте расчеты в хранилище данных (для более удобного поиска и проверки в дальнейшем)
person BryanH    schedule 08.07.2009

Задумайтесь на мгновение о том, что электронные таблицы, поскольку многие вещи работают на более высоком уровне абстракции, чем код C#.

Таким образом, для повторной реализации ваших рабочих листов в .Net у вас есть несколько широких подходов.

  1. Индивидуальное специальное решение с множеством узких специфических функций для вашей проблемной области.
  2. Или вы могли бы повторно реализовать концепцию электронной таблицы. Разделите механизм вычисления, который оценивает матрицу выражений с необязательными зависимостями между ячейками из постоянства и представления значений maxtrix. Сохраните данные в хранилище данных, которое вам нравится (xml, реляционная БД), создайте веб-приложение или настольное приложение для редактирования и чтения результатов и их оценки с помощью пользовательского механизма.
person Scott Weinstein    schedule 08.07.2009
comment
Первоначально мы говорили о том, чтобы сделать что-то похожее на ваш вариант 2, но по какой-то причине они решили отказаться от этой идеи в пользу простых электронных таблиц. Будучи низким человеком, я не имею права голоса, поэтому мы создаем 150 электронных таблиц, чтобы делать точно такие же расчеты с небольшими отличиями. После копирования и вставки в течение нескольких часов это заставило меня задуматься (мечтать) о других возможностях. - person Dcritelli; 09.07.2009
comment
Говорят, что лень — признак хорошего кодера... На самом деле это не столько лень, сколько упрямая вера в то, что есть лучший способ делать что-то. Компьютеры — это машины, предназначенные для обработки повторяющихся задач с данными — вам просто нужно научиться их использовать. Удачи. - person steamer25; 09.07.2009

Чтобы добавить некоторые особенности:

  • Значения ячеек становятся переменными или записями в базе данных. Например, вместо того, чтобы формула для B1 была = A1 + 2 (где A1 содержит количество виджетов для данной политики), у вас есть:

    var widgets = (from policy in db.Policies select new {policy.widgets}).First().widgets;
    var moreWidgets = widgets + 2;

  • Функции и макросы переносятся — например, Round(B1, 0) становится Math.Round(moreWidgets, 0, MidpointRounding.AwayFromZero)

  • Связанные данные и функции группируются в классы и экземпляры объектов.
  • Листы становятся таблицами базы данных для хранения и вкладками/диалоговыми окнами/веб-страницами и т. д. для пользовательского интерфейса.
  • Вы можете создавать формы для данных, которые вводятся/просматриваются по одной за раз:

Имя: [________________]
Фамилия: [________________]
SSN: [________________]

Преимущества выполнения всего этого (при условии, что все сделано хорошо):

  • Улучшенная организация, позволяющая легче находить функциональные возможности для повторного использования/расширения.
  • Улучшенная производительность
  • Общий доступ к данным в режиме реального времени, включая агрегирование данных, которые в настоящее время распределены по нескольким файлам.
  • Целый мир новых функций — возможно, вы захотите добавить синтез речи или что-то еще.
person steamer25    schedule 08.07.2009
comment
Я полагаю, что база данных должна была быть очевидна, и это действительно пришло мне в голову. Однако я склонен думать о базах данных как о ведрах, а не как о сложных инструментах. Кажется, мне нужно много учиться. - person Dcritelli; 09.07.2009
comment
Базы данных хороши для объединения, группировки и сортировки данных. В .NET 3 Microsoft добавила Language INtegrated Query (LINQ), который позволяет вам выполнять задачи типа базы данных в коде, где должна выполняться настоящая сложная обработка. - person steamer25; 09.07.2009