You could try this:
historical_transactions.astype('float32').to_feather('tmp/historical-raw')
Note that above line could fail if you also have fields that are not convertable into float32. In order to ignore those columns and leave them as they are, try:
historical_transactions.astype('float32', errors='ignore').to_feather('tmp/historical-raw')
Feather format depends on Pyarrow which in turn depends on the Apache Parquet format. Regarding float formats, it only supports float (32) and double (64). Not sure how big of a deal this is for you but there is also an open request to automatically "Coerce Arrow half-precision float to float32" in GitHub.
See here and here for details.